Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从azure blob下载excel文件并处理其数据,而无需将文件保存到本地目录_Node.js_Azure Blob Storage_Node.js Stream - Fatal编程技术网

Node.js 从azure blob下载excel文件并处理其数据,而无需将文件保存到本地目录

Node.js 从azure blob下载excel文件并处理其数据,而无需将文件保存到本地目录,node.js,azure-blob-storage,node.js-stream,Node.js,Azure Blob Storage,Node.js Stream,我想从azure blob下载一个excel文件,并使用“xlsx”npm模块处理其数据。 我通过将文件保存到node.js服务器上的本地目录实现了这一点 但我必须实现这一点,而无需将文件保存到服务器本地 我如何做到这一点 下面是我的js文件,使用-download to local directory方法 const xlsx = require('xlsx'); const azureStorageConfig = { accountName: "", accountKey:

我想从azure blob下载一个excel文件,并使用“xlsx”npm模块处理其数据。 我通过将文件保存到node.js服务器上的本地目录实现了这一点

但我必须实现这一点,而无需将文件保存到服务器本地

我如何做到这一点

下面是我的js文件,使用-download to local directory方法

const xlsx = require('xlsx');

  const azureStorageConfig = {
  accountName: "",
  accountKey: "",
  blobURL: "",
  containerName: "test-container"
};

let fileName = "test_blob.xlsx";

const downloadBlob = async (blobName, downloadFilePath) => {
  return new Promise((resolve, reject) => {
    const name = path.basename(blobName);
    const blobService = azureStorage.createBlobService(azureStorageConfig.accountName,azureStorageConfig.accountKey); 
    blobService.getBlobToLocalFile(azureStorageConfig.containerName,blobName,`${downloadFilePath}${name}`, function(error, serverBlob) {
        if (error) {
            reject(error);
        } else {
            resolve(downloadFilePath);
        }
    });
  });
};

downloadBlob(fileName,'./local_dir/').then((downloadFilePath)=>{
  parseExcel(downloadFilePath + fileName);
});

const parseExcel = function(downloaded_file_path){
  let workbook = xlsx.readFile(downloaded_file_path);
  // Parse further
}

在执行不需要将文件保存到本地目录的过程时,此代码将如何更改?

作为参考,以下是我的想法和示例代码,以满足您的需要,如下所示

  • 使用SAS令牌生成blob url

    var azure = require('azure-storage');
    var accountName = '<your account name>';
    var accountKey = '<your account key>';
    var blobService = azure.createBlobService(accountName, accountKey);
    
    var containerName = 'test-container';
    var blobName = 'test_blob.xlsx';
    
    var startDate = new Date();
    var expiryDate = new Date(startDate);
    expiryDate.setMinutes(startDate.getMinutes() + 100);
    startDate.setMinutes(startDate.getMinutes() - 100);
    
    var sharedAccessPolicy = {
      AccessPolicy: {
        Permissions: azure.BlobUtilities.SharedAccessPermissions.READ,
        Start: startDate,
        Expiry: expiryDate
      }
    };
    
    var token = blobService.generateSharedAccessSignature(containerName, blobName, sharedAccessPolicy);
    var sasUrl = blobService.getUrl(containerName, blobName, token);
    

  • 希望有帮助。

    您好,由于某些原因,我无法使用此方法从excel文件中访问单元格值。请检查并回复。console.log(工作簿.SheetNames);显示Sheet1,但输出错误。实际上无法访问工作表和读取单元格值。@PiyushUpadhyay哦,正如您所说,我的代码中有一个问题,无法通过
    请求
    从带有sas令牌的blob url读取xlsx。我修复了它并更新了我的帖子,以获取第2部分的代码。请试试。@PiyushUpadhyay与此同时,我找到了
    xlsx
    软件包的官方示例代码。
    var request = require('request');
    var XLSX = require('xlsx');
    request(sasUrl, {encoding: null}, function (error, response, body) {
      var workbook = XLSX.read(body, {type:"buffer"});
      console.log(workbook.Sheets.Sheet1);
    });