node.js 和 S3/使用 knox 写入 s3

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

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

相关文章:

amazon-s3 - 为 Amazon S3 生成身份验证 header

node.js - 蒙戈错误: write EPIPE in node server

java - 从现有 AWS Glue 爬网程序获取 Cloudformation

jquery - XMLHttpRequest 无法加载 请求的资源上不存在 'Access-Control-Allow-Origin' header 。 AWS S3、Retina.JS

amazon-web-services - 无法从亚马逊复制简单的哈希签名示例

amazon-web-services - Cloudformation复杂参数文件

Hibernate Search + Infinispan + S3 -- 防止字母数字文件名

node.js - ExpressJS - 使用基于参数的路由和绝对路由

python - Node.js 从 stdin 读取时无法读取 python 子进程 stdout

node.js - 终端进度条未显示在 Docker 控制台中。