Сбой загрузки amazon-s3 для загрузки файлов в цикле - PullRequest
0 голосов
/ 20 февраля 2020

Пытаясь загрузить 40k файлов в s3 из nodejs и aws -sdk, я обещаю, что каждый код работает нормально до 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; }
  }
  });
 }

1 Ответ

3 голосов
/ 20 февраля 2020

Вместо этого используйте более безопасный подход и откройте подпроцесс, используя aws cli.

Используйте для этого команду aws s3 sync или copy.

Это будет быть намного быстрее, а также более устойчивым к сбоям, чем метод грубой силы, такой как вызовы внутри a для l oop.

В случае, если все файлы не находятся в одном или в некотором ограниченном количестве каталогов. Вы должны создать список путей к файлу, который вы хотите загрузить. Запишите этот текстовый файл на диск. Используйте aws cli для выгрузки или загрузки, используя пути из текстового файла.

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