Как загрузить несколько объектов буфера в один файл в AWS S3, используя node.js? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь загрузить несколько буферных объектов в один файл в 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 голосов
/ 24 декабря 2018

AFAIK, вы не можете загрузить массив буферов на S3: если ваша цель состоит в том, чтобы файл all.xslx на S3 содержал ваши серии буферов, соединенных вместе, вам нужно сначала объединить буферы вместе, а затем загрузить один буфер.

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

// Now upload combinedBuffer to S3

Тем не менее, я не уверен, что это именно то, что вам действительно нужно - это приведет к созданию одного файла, который содержит несколько файлов Excel, например, нет (например)один файл Excel с несколькими листами, который вы должны будете создать самостоятельно.(Не эксперт, возможно, Excel достаточно умен, чтобы открыть такой файл, не уверен.)

0 голосов
/ 24 декабря 2018

Я не знаю, поможет ли это, но правильный sdk функции s3.upload():

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

с параметром options, который не является обязательным.

Теперь для нескольких загрузоклогика состоит в том, чтобы сделать цикл for для всех ваших буферных объектов и использовать upload () в каждом из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...