节点GET请求返回zip文件需要导入JSON到MSSQL
我使用的节点进行了JSON的GET请求。它返回一个zip文件,所有的数据只是一堆数字。我找不到任何东西在网上告诉我如何从zip文件中提取数据,实际读取JSON文件。如何打开压缩在这一点上,所以我可以把它放到MSSQL服务器?
我得到的请求,但不知道如何从这里读它,它只是说,它的附件。
"content-disposition":["attachment; filename=FileName.zip"]
这是GET请求,我在打电话的节点:
require('dotenv').config();
const fetch = require('fetch-everywhere');
const base64 = require('base-64');
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
const user = "Enter Username Here";
const pass = "Enter Password Here";
const headers = new Headers({
"Authorization": `Basic ${base64.encode(`${user}:${pass}`)}`
});
fetch('Link', {
method: 'GET',
headers: headers,
})
.then(function(response) {
return response;
})
.then(function(myJson) {
console.log(JSON.stringify(myJson));
}).catch(error => {throw error});
所以返回的是一个zip文件。我在哪里从这里走,如果我需要它转储到MSSQL服务器?
任何帮助将不胜感激!
回答如下:你提到的文件是非常大(10GB,第一,然后进行编辑为100MB),在你编辑的评论。它不会是可行的存储在MSSQL该文件,因为RDBMS系统的设计不能存储大量的文件。您可能要考虑将这个对象Azure存储或AWS S3为例。如果您需要了解更多信息,请阅读本https://softwareengineering.stackexchange/questions/150669/is-it-a-bad-practice-to-store-large-files-10-mb-in-a-database
我怀疑可能的NodeJS不是一个很好的技术,此下载/提取或者,你可能要考虑它可以从较高的资源消耗和多线程中受益的另一项技术。但是,如果你想这样做的NodeJS中,把它归结为三个步骤
- 下载大文件
- 解压缩大文件
- 存储大量文件的地方(如天青或Amazon的存储)
为了下载文件而不会耗尽内存,需要流/管吧,我不知道fetch-everywhere
将如何处理这个问题,所以我提供的请求,利用request
而不是流的例子。我也拿起node-stream-zip
,因为它有一个流API,不会整组加载到内存中。
我已经离开了代码的“存储”部分空,因为我不可能知道你要来存储它和MSSQL是不是一种选择。
const fs = require('fs');
const request = require('request');
const progress = require('request-progress');
const StreamZip = require('node-stream-zip');
// download large file...
const url = 'example/path/to/large/file';
const zipPath = 'generateATmpFileName.zip';
const jsonPath = 'generateATmpFileName.json';
progress(request(url))
.on('end', function () {
// file has been completely downloaded, lets unzip it
var zip = new StreamZip({
file: zipPath,
storeEntries: true
});
zip.on('ready', function() {
zip.stream('path-to-json-file-in-zip.json', function(error, zstream) {
zstream.pipe(fs.createWriteStream(jsonPath));
zstream.on('end', function() {
zip.close();
// file has been completely extracted, do what you want with it
});
});
});
})
.pipe(fs.createWriteStream(zipPath));