将大文件上传到 Amazon S3 会在两分钟后创建两个副本
Uploading large files to Amazon S3 creates two copies after two minutes
我正在尝试从用 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)。
req 对象在默认超时 2 分钟后过期,这是创建新 req 对象和新 API 命中。
覆盖服务器实例上的超时键解决了我的问题:
让服务器 = app.listen(端口, () => {
console.log(Started up at port ${port}
);
});
server.timeout = 600000; //6 lac 毫秒 = 10 分钟,默认为 2 分钟
module.exports = {应用};
感谢this answer by SomeKittens。
我正在尝试从用 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)。
req 对象在默认超时 2 分钟后过期,这是创建新 req 对象和新 API 命中。
覆盖服务器实例上的超时键解决了我的问题:
让服务器 = app.listen(端口, () => {
console.log(Started up at port ${port}
);
});
server.timeout = 600000; //6 lac 毫秒 = 10 分钟,默认为 2 分钟
module.exports = {应用};
感谢this answer by SomeKittens。