s3.putObject()在监听httpDownloadProgress事件时阻塞服务器

时间:2014-04-29 01:58:54

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

我通过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');
});

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

有关如何防止此阻止的任何建议吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

只是一个想法,但是你不能将它包装在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);

让我知道这是否有效!