我正在尝试通过以下代码使用 knox 写入 S3:
var knox = require('knox');
var client = knox.createClient({
key: 'key'
, secret: 'pass'
, bucket: S3_BUCKET
});
fs.stat("/opt/files/" + url, function(err, stats) {
if (stats != null && stats.size != 0){
var req = client.put(url, {
'Content-Length': stats.size
});
req.on('error' ,function (err){
console.log(err);
})
var readstr = fs.createReadStream("/opt/files/" + url);
readstr.pipe(req);
readstr.on('error', function (err){
console.log(err);
})
对于大文件,它给了我以下错误(我检查了 900MB 的文件):
{ [Error: write ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'write' }
证书没问题,我成功使用 key 和 secret 访问 key 登录 Amazon 和其他 npm-packages。另外,我成功使用Knox上传小文件。
我知道它连接错误,但我不明白为什么会发生以及如何解决它。
最佳答案
您可能达到了亚马逊方面存在的“大文件”限制。
根据他们的常见问题解答,对于大于 100MB 的对象,用户应使用“分段上传”。
为此,您可以使用 "know-mpu"模块和你的例子将变成
var knox = require('knox');
var MultiPartUpload= require('knox-mpu');
var client = knox.createClient({
key: 'key'
, secret: 'pass'
, bucket: S3_BUCKET
});
var upload = new MultiPartUpload(
{
client: client,
objectName: url,
file: '/opt/files' + url
},
function(err, body) {
console.log(body);
}
);
关于node.js 和 S3/使用 knox 写入 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265259/