【问题标题】:node.js & S3 / Write to s3 with knoxnode.js 和 S3 / 使用 knox 写入 s3
【发布时间】:2014-10-05 13:53:49
【问题描述】:

我正在尝试通过以下代码使用 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' }

证书没问题,我成功使用密钥和秘密访问密钥登录到 Amazon 和其他 npm 包。另外,我用 Knox 成功上传了小文件。

我知道它连接错误,但我不明白为什么会发生以及如何解决它。

【问题讨论】:

  • 你试过mpu方案吗?
  • 我改用其他解决方案 - S3 包,正如 knox 推荐的那样:npmjs.org/package/s3。这为我提供了大文件的解决方案。

标签: node.js amazon-web-services amazon-s3 knox-amazon-s3-client


【解决方案1】:

您可能正在达到亚马逊方面存在的“大文件”限制。

根据他们的常见问题,对于大于 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);
        }
    );

【讨论】:

    【解决方案2】:

    你没有做任何回应。尝试为请求中的“响应”事件添加侦听器,例如

    req.on('response', function(res){
      // ...
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2013-11-21
      • 2011-10-10
      • 2013-06-22
      相关资源
      最近更新 更多