Node.js s3.putObject()侦听httpDownloadProgress事件时阻塞服务器

Node.js s3.putObject()侦听httpDownloadProgress事件时阻塞服务器,node.js,asynchronous,amazon-web-services,amazon-s3,Node.js,Asynchronous,Amazon Web Services,Amazon S3,我正在通过node.js运行https服务器。我正在使用AmazonS3来存储一些文件。我使用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,

我正在通过node.js运行https服务器。我正在使用AmazonS3来存储一些文件。我使用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');
});
我得到的文件正确,但在上传过程中,我无法访问我的网站上的任何东西。我相信在上传过程中它会阻止我服务器上的任何活动。我认为这段代码是异步的,但我想不是

有没有关于如何防止这种堵塞的建议


提前谢谢你。

只是一个想法,但是你不能用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);
让我知道这是否有效