Amazon S3 getObject abort и await обещают, что ответа нет - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно иметь возможность захватывать объекты s3 на моем node.js сервере и предоставлять их для загрузки в моем ответе. js клиент.

Эта функция работала нормально, пока я не попробовал большой файл (почти 4 ГБ).

Затем я понял, что мне нужно предотвратить повторные запросы для одного и того же объекта и предложить пользователю обратную связь и варианты отмены.

На самом деле я так и не получил запрос на файл размером 4 ГБ для загрузки на клиенте, даже после ожидания в течение 10 минут (сервер node.js расположен на AWS серверах, и соединение с s3 должно быть достаточно быстрым).

Эта функция вызвала некоторые проблемы, такие как сервер начиная с ошибки 502 для каждого запроса, так как он зависает на этой функции.

Я думаю, что когда я отменяю запрос, сервер зависает на функции, вероятно, потому что я вызываю и request.abort(), и await request.promise() .

Код сервера следующий:

async function getOutputs(req, request, userBucket) {
  let canceled = false;
  req.on('close', function (err){
    canceled = true;
  });

  const requestModel = await Request.findOne({where: {id: request}});
  if(!requestModel){
    return {
      code: 400,
      data: ['Invalid Request'],
    };
  }
  const m = moment.utc(requestModel.dataValues.timestamp);
  m.tz('Europe/Madrid');
  const filePath = 'root/' + userBucket + '/' + m.format("YYYYMMDDHHmmss") + '/output/results.zip';
  const s3params = {
    Bucket: bucket,
    Key: filePath,
  };

  try{
    const request = s3.getObject(s3params).on('httpData', function(chunk){
      if(canceled) {
        request.abort();
      }
  });
  const result = await request.promise();
    return {
      code: 202,
      data: result.Body,
    };
  } catch(error) {
    return {
      code: 400,
      data: ['Report not yet available, please try again later'],
    };
  }
}

С учетом сказанного у меня есть два вопроса: как мне получить отмененные запросы, чтобы они не зависали на подаче. r, и есть ли ограничение на s3 для больших файлов, о которых я не знаю?

Спасибо.

...