簡體   English   中英

節點get請求返回zip文件,需要將JSON導入MSSQL

[英]Node get request returns zip file need to import JSON into MSSQL

我正在使用node發出JSON的get請求。 它返回一個zip文件,所有數據只是一堆數字。 我無法在網上找到任何東西來向我展示如何從zip文件中提取數據以實際讀取JSON文件。 此時如何打開zip以便將其放入MSSQL Server?

我收到了請求,但不確定如何從這里閱讀它,只是說它是附件。

"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 Server中,該從哪里去?

任何幫助將不勝感激!

您在編輯的注釋中提到文件非常大(首先為10GB,然后再編輯為100MB)。 在MSSQL中存儲此文件是不可行的,因為rdbms系統並非旨在存儲大文件。 例如,您可能要考慮將此對象存儲到Azure存儲或AWS S3。 如果您需要更多信息,請閱讀此內容https://softwareengineering.stackexchange.com/questions/150669/is-it-a-bad-practice-to-store-large-files-10-mb-in-a-database

我懷疑nodejs可能也不是這種下載/提取的好技術,您可能要考慮另一種可以從更高的資源消耗和多線程中受益的技術。 但是,如果您希望在nodejs中執行此操作,則可以歸結為三個步驟

  • 下載大文件
  • 解壓縮大文件
  • 將大文件存儲到某處(例如天藍色或亞馬遜存儲)

為了在不耗盡內存的情況下下載文件,您需要對它進行流式傳輸/管道傳輸,我不知道fetch-everywhere可以進行fetch-everywhere ,因此我提供了一個使用request流式傳輸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.com/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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM