gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:37 25 4
gpt4 key购买 nike

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

但我必须实现此操作,而不需要将文件本地保存在服务器上

如何实现这一目标?

以下是我使用-下载到本地目录方法的js文件。

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
}

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

最佳答案

作为您的引用,这是我的想法以及满足您需求的示例代码,如下。

  1. 使用 SAS token 生成 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);
  2. 通过request读取blob主体字节,然后使用 XLSX.read(data, read_opts) 将 blob 正文解析为 Uint8Array

    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);
    });

希望有帮助。

关于node.js - 从azure blob下载excel文件并处理其数据,无需将文件保存到本地目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56388727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com