我正在尝试从用NodeJS编写的服务器上将大文件(50至60 MB)上传到Amazon S3存储桶。服务器从ReactJS前端接收文件。我遇到了一个问题,即有两个相同文件的副本上载到S3存储桶(尽管时间戳相差两分钟)。 从我的存储桶中查看屏幕截图
这是我用expressJS / NodeJS编写的api:
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);
}
});
这是我的控制台的样子
.. 两次都。
我正在检查浏览器的“网络”标签,并且发送的请求只有一个。
,尽管这样仅收到一次响应:
我在做什么错..请在这里帮助我! 预先感谢一百万。
(我使用this tutorial by Keith Weaver编写了此API)。
答案 0 :(得分:0)
req 对象在默认超时2分钟后过期,这是创建新的 req 对象和新API的原因。
在服务器实例上覆盖超时键解决了我的问题:
让服务器= app.listen(端口,()=> {
console.log(Started up at port ${port}
);
});
server.timeout = 600000; // 6 lac毫秒= 10分钟,默认值为2分钟
module.exports = {app};