Загрузка больших файлов в Amazon S3 создает две копии через две минуты

Я пытаюсь загрузить большие файлы (от 50 до 60 МБ) в Amazon S3 Bucket с сервера, написанного на NodeJS. Сервер получает файлы из внешнего интерфейса ReactJS. Я столкнулся с проблемой, что две копии одного и того же файла загружаются в корзину S3 (хотя отметка времени отличается на две минуты). посмотреть скриншот из моего ведра

Вот мой API, написанный в ExpressJS/NodeJS:

app.post('/myAPI', (req, res) => {
  
  console.log("------------------------------- In builds API - post request -------------------------------");
  
    console.log(req.method);
    console.log("This device is Android");
    let File = req.files.file;

    //appending the date object to the file name
    let date = JSON.stringify(new Date()).replace(/\"/g, "").replace(/:/g, "-");
    let index = File.name.lastIndexOf(".");
    let newname = [File.name.slice(0, index), date, File.name.slice(index)].join('');
    newname = req.body.project + "/" + newname;
    
    let busboy = new Busboy({ headers: req.headers });
    
    //this event is fired when the data is successfully uploaded
    eventEmitter.on('data_uploaded', function() {
      res.end(`done !!!!!!!!!!!!!!!!!!`);
    });

    busboy.on('finish', function( ) {
      
      let s3bucket = new AWS.S3({
        accessKeyId: IAM_USER_KEY,
        secretAccessKey: IAM_USER_SECRET,
        Bucket: BUCKET_NAME
      });

      s3bucket.createBucket(function () {
        console.log("In create bucket method");
        var params = {
          Bucket: BUCKET_NAME,
          Key: newname,
          Body: File.data
        };
        s3bucket.upload(params, function (err, data) {
          if (err) {
            console.log('error in callback');
            console.log(err);
          }
          
          console.log(data);
          
          eventEmitter.emit('data_uploaded'); 
        });
      });

    });
    
    //piping the request to writable stream busboy
    req.pipe(busboy);
  }

});

вот как выглядит моя консоль

.. все два раза.

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

и хотя ответ получен только один раз, как это:

Что я делаю не так.. пожалуйста, помогите мне здесь! Спасибо за миллион заранее.

(Я написал этот API, используя это руководство Кейта Уивера).

1 ответ

Решение

Срок действия объекта req истекает после тайм-аута по умолчанию, равного 2 минутам, что стало причиной создания нового объекта req и нового попадания API.

Переопределение ключа тайм-аута на экземпляре сервера решило мою проблему:

let server = app.listen (port, () => {console.log (Started up at port ${port}); });

server.timeout = 600000; // 6 lac миллисекунд = 10 минут, по умолчанию 2 минуты

module.exports = {app};

Благодаря этому ответу SomeKittens.

Другие вопросы по тегам