【发布时间】:2017-03-08 03:46:17
【问题描述】:
这让我发疯了。
我需要我的服务器从 S3 下载 100 个相对较小的文件文件(最大 2 Mb)。
它始终适用于约 95% 的文件,但它会阻止最后 6-8 个文件。 resolve 和 reject 回调永远不会被调用...
我尝试并行下载文件...
- 有人遇到过这种情况吗?
- 会不会是丢包导致流没有关闭?
- 是否有最大并发下载数?
这是代码,从技术上讲,它适用于 95% 的情况:
let singleGetFromS3 = (bucket, fileName) => {
return new Promise((resolve, reject) => {
let extension = getFileNameExtension(fileName);
fs.stat(`./${fileName}`, (err, stat) => {
if (err === null) {
console.log(`${fileName} exists locally`);
resolve(fileName);
} else if(err.code === 'ENOENT') {
let params = {Bucket: bucket, Key: fileName};
let file = require('fs').createWriteStream(`./tmp-${fileName}`);
s3.getObject(params).createReadStream()
.on('error', (error) => { return reject(error); })
.on('end', () => {
fs.rename(`./tmp-${fileName}`, `./${fileName}`, reject);
return resolve(fileName);
})
.pipe(file);
} else {
reject(err);
}
});
});
};
使用:
"aws-sdk": "^2.23.0",
node --version
v4.5.0
【问题讨论】: