如何使用node.js将多个缓冲区对象上传到AWS S3中的同一文件?

时间:2018-12-24 11:01:49

标签: node.js amazon-web-services amazon-s3

我正在尝试将多个缓冲区对象上传到AWS s3中的单个文件。我无法这样做。

对于这些缓冲区中的每一个,我都可以将它们分别上传到S3中的文件中,但不能合并。

let buffer: any = [];
let data: Buffer[] = [];
buffer[0] = await getModuleData("TK515184","companyProfileFull","bearer 1f96884e-8763-448b-9d07-bd4823e8e9b9","");
buffer[1] = await getModuleData("TK515184","fundingRound","bearer 1f96884e-8763-448b-9d07-bd4823e8e9b9","");
buffer[2] = await getModuleData("TK515184","acquisition","bearer 1f96884e-8763-448b-9d07-bd4823e8e9b9","");
buffer[3] = await getModuleData("TK515184","investment","bearer 1f96884e-8763-448b-9d07-bd4823e8e9b9","");
buffer[4] = await getModuleData("TK515184","fundamentals","bearer 1f96884e-8763-448b-9d07-bd4823e8e9b9","",["FY-1", "FY-0", "FQ-1", "FQ-0"],["FY+1", "FY+2", "FY+3", "FQ+1", "FQ+2", "FQ+3"]);
data[0] = await new OverviewModule().createTearSheetExcel(buffer[0]);
data[1] = await new AcquisitionModule().createAcquisitionExcel(buffer[2]);
data[2] = await new InvestmentModule().createInvestmentExcel(buffer[3]);
data[3] = await new FundingModule().createFundingExcel(buffer[1]);
data[4] = await new FAndE(["FY-1", "FY-0", "FQ-1", "FQ-0"],["FY+1", "FY+2", "FY+3", "FQ+1", "FQ+2", "FQ+3"]).createFundamentalsAndEstimatesExcel(buffer[4]);
for(let i = 0;i<5;i++)
{
    S3.upload(APP_BUCKET_NAME,"all.xlsx",data[i]);
}

“ all.xlsx” =>要创建的文件名和data =>缓冲区数组。

2 个答案:

答案 0 :(得分:0)

我不知道这是否有帮助,但是s3.upload()函数的正确sdk是:

var params = {Bucket: 'bucket', Key: 'key', Body: stream};
var options = {partSize: 10 * 1024 * 1024, queueSize: 1};
s3.upload(params, options, function(err, data) {
  console.log(err, data);
});

选项参数不是必需的。

现在要进行多次上传,逻辑是为所有缓冲区对象创建一个for循环,并在每个缓冲区对象中使用upload()。

答案 1 :(得分:0)

否则,您无法将缓冲区数组上传到S3:如果您的目标是S3中的文件all.xslx包含一系列串联在一起的缓冲区,则需要先将缓冲区串联在一起,然后再上传单个缓冲区缓冲。

let combinedBuffer = buffer[0].concat(buffer.slice(1));

// Now upload combinedBuffer to S3

也就是说,我不确定这是否是您真正想要的-这将产生包含多个背对背Excel文件的单个文件,而不是(例如)包含多个Excel文件的单个文件床单,您必须自己动手制作。 (不是专家,也许Excel足够聪明,无论如何都无法打开这样的文件。)