gpt4 book ai didi

node.js - amazon-s3 上传因循环上传文件而失败

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

尝试从nodejs和aws-sdk上传40k文件到s3,我确实 promise 每件事代码都可以正常工作,最多5800条记录,但之后它失败,其余文件没有上传,任何人都可以帮助为什么会发生这种情况,或者我必须使用其他方法,或者我需要更新我的代码吗?

这是我的代码

public static convertClobAndUploadToS3(allClobAttachments: Array<RfAttachment>):
Promise<FileConvertS3UploadResponse> {
return new Promise(async (resolve, reject) => {
const fileConvertResp: FileConvertS3UploadResponse = { processed: [], unprocessed: [] };
for (let i = 0; i < allClobAttachments.length; i++) {
const rfAttachment = allClobAttachments[i];
const mainFileBufferFormat: Buffer = Buffer.from(rfAttachment.CLOB);
const path = CONST.S3.PATH.MAIN_FILE;
const fileName = rfAttachment.RF_ID + CONST.S3.EXT.MAIN_FILE;
// upload only single file to s3 at a time and returns url
const url = await GFIUtils.uploadFileToS3(config, fileName, mainFileBufferFormat, path);
url ? fileConvertResp.processed.push({ RFID: rfAttachment.RF_ID, url, rfAttachment })
: fileConvertResp.unprocessed.push(rfAttachment.RF_ID);
if (fileConvertResp.processed.length === allClobAttachments.length) {
logger.info(`CLOB STAGE::: All clob successfully uploaded!!! TOTAL CLOB:::${allClobAttachments.length}`);
return resolve(fileConvertResp);
} else if (fileConvertResp.unprocessed.length + fileConvertResp.processed.length
=== allClobAttachments.length) {
logger.info(`allClobAttachments::: ${allClobAttachments.length}`);
logger.info(`processed::: ${fileConvertResp.processed.length}`);
logger.info(`unprocessed::: ${fileConvertResp.unprocessed.length}`);
return reject(fileConvertResp);
} else { continue; }
}
});
}

最佳答案

与其这样做,不如采取更安全的方法并使用 aws cli 打开子流程。

使用aws s3synccopy命令来执行此操作。

与 for 循环内的调用等暴力方法相比,它会更快,并且更能防止失败。

如果所有文件不在一个或有限数量的目录中。您应该生成要上传的文件的路径列表。将该文本文件写入磁盘。使用 aws cli 使用文本文件中的路径上传或下载。

关于node.js - amazon-s3 上传因循环上传文件而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60322193/

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