【问题标题】:s3.putObject() blocking server while listening to httpDownloadProgress events3.putObject() 在监听 httpDownloadProgress 事件时阻塞服务器
【发布时间】:2014-04-30 18:45:38
【问题描述】:

我正在通过 node.js 运行 https 服务器。我正在使用 amazon s3 存储一些文件。我使用 aws-sdk-js 作为节点模块。

这是我用来在我的服务器上上传内容的代码:

var aws = require('aws-sdk');
aws.config.loadFromPath('./AwsConfig.json');
var s3 = new aws.S3();

s3.putObject({
    ACL: 'public-read',
    Bucket: BUCKET_NAME,
    Key: remoteFilename,
    Body: fileBuffer,
    ContentType: metaData
}, function (err, obj) {
    if(err) console.log(err);
    else {
        console.log('uploaded file[' + path + '] to [' + remoteFilename + '] as [' + metaData + ']');
    }
}).on('httpUploadProgress', function(progress) {
    console.log('Upload', progress.loaded, 'of' , progress.total, 'bytes');
});

我可以正确获取文件,但是在上传过程中我无法访问我网站上的任何内容。我相信在上传过程中它会阻止我服务器上的任何活动。我以为这段代码是异步的,但我猜不是。

关于如何防止这种阻塞的任何建议?

提前谢谢你。

【问题讨论】:

    标签: node.js asynchronous amazon-web-services amazon-s3


    【解决方案1】:

    只是一个想法,但您不能将其包装在 setTimeout 中以使其异步吗?:

    setTimeout(function() {
        s3.putObject({
            ACL: 'public-read',
            Bucket: BUCKET_NAME,
            Key: remoteFilename,
            Body: fileBuffer,
            ContentType: metaData
        }, function (err, obj) {
            if(err) console.log(err);
            else {
                console.log('uploaded file[' + path + '] to [' + remoteFilename + '] as [' + metaData + ']');
            }
        }).on('httpUploadProgress', function(progress) {
            console.log('Upload', progress.loaded, 'of' , progress.total, 'bytes');
        });
    }, 0);
    

    让我知道这是否有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2011-09-28
      • 2022-12-26
      • 2015-05-23
      • 2016-07-17
      相关资源
      最近更新 更多