Node.js 从azure blob下载excel文件并处理其数据,而无需将文件保存到本地目录
我想从azure blob下载一个excel文件,并使用“xlsx”npm模块处理其数据。 我通过将文件保存到node.js服务器上的本地目录实现了这一点 但我必须实现这一点,而无需将文件保存到服务器本地 我如何做到这一点 下面是我的js文件,使用-download to local directory方法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:
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
}
在执行不需要将文件保存到本地目录的过程时,此代码将如何更改?作为参考,以下是我的想法和示例代码,以满足您的需要,如下所示
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);
});