Загрузка больших файлов в 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.