簡體   English   中英

將ExcelJS的輸出上傳到NodeJS中的Azure Blob存儲

[英]Uploading output of ExcelJS to Azure Blob Storage in NodeJS

所以我正在使用ExcelJS創建一個Excel文件。 目前,我正在將文件保存到磁盤。 我要添加到文件中的數據來自API調用。

let options = {
  filename: 'pathtofile',
  useStyles: true,
  useSharedStrings: true
}

let workbook = new Excel.stream.xlsx.WorkbookWriter(options)
let sheet = workbook.addWorksheet('myWorksheet')

// add some data to the file

sheet.commit()
workbook.commit()

我現在想更改它,以便將其上傳到Azure Blob存儲。 ExcelJS允許指定stream而不是要提交的filename 因此,我決定使用Memory Streams JS,因此現在這些選項如下所示。

let stream = new streams.WritableStream()

let options = {
  stream: stream,
  useStyles: true,
  useSharedStrings: true
}

通過閱讀Azure文檔,兩個最合適的方法似乎是createBlockBlobFromStream()createWriteStreamToBlockBlob() ,它們似乎都想要一個可讀流(如果我錯了,請糾正我)。 這是我無法使用ExcelJS的可寫流,但是我需要Azure Blob存儲的可讀取流。 顯然,我仍然可以將文件寫入磁盤。 從文件創建可讀流; 然后在上傳到Azure Blob存儲后最終刪除文件,但這會產生很多開銷。 我要以一種真正的回旋方式來解決這個問題嗎?

Streaming XLSX Writer一節中有一個解釋:

如果在選項中未指定流或文件名,則工作簿編寫器將創建一個StreamBuf對象,該對象將XLSX工作簿的內容存儲在內存中。 可以通過屬性workbook.stream訪問此StreamBuf對象,該對象可用於通過stream.read()直接訪問字節或將內容通過管道傳輸到另一個流。

因此,您可以嘗試以下代碼段,而無需在options設置filename

let blobSvc = azure.createBlobService();

let options = {
  useStyles: true,
  useSharedStrings: true
}

let workbook = new Excel.stream.xlsx.WorkbookWriter(options)
let sheet = workbook.addWorksheet('myWorksheet')
sheet.columns = [
    { header: 'Id', key: 'id', width: 10 },
    { header: 'Name', key: 'name', width: 32 },
    { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
];
sheet.commit()
workbook.commit()
workbook.stream.pipe(blobSvc.createWriteStreamToBlockBlob('mycontainer','test.xlsx',function(err,result){
    if(err)console.log(err)
    console.log(result);
}))

暫無
暫無

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

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