繁体   English   中英

s3文件上传未返回响应

[英]s3 file upload does not return response

我正在使用Node AWS-SDK将文件上传到现有的S3存储桶。 使用下面的代码,文件最终会上传,但似乎几次都没有返回状态代码。 同样,文件成功上传后,return语句也不会执行。

 exports.create = function(req, res) { var stream = fs.createReadStream(req.file.path); var params = { Bucket: 'aws bucket', Key: req.file.filename, Body: stream, ContentLength: req.file.size, ContentType: 'audio/mp3' }; var s3upload = s3.upload(params, options).promise(); s3upload .then(function(data) { console.log(data); return res.sendStatus(201); }) .catch(function(err) { return handleError(err); }); } 

日志

 POST /api/v0/episode/upload - - ms - - POST /api/v0/episode/upload - - ms - - { Location: 'https://krazykidsradio.s3-us-west-2.amazonaws.com/Parlez-vous%2BFrancais.mp3', Bucket: 'krazykidsradio', Key: 'Parlez-vous+Francais.mp3', ETag: '"f3ecd67cf9ce17a7792ba3adaee93638-11"' } 

同样,文件成功上传后,return语句也不会执行。

create()调用未return任何值,请参阅为什么.then()的值未定义链接到Promise?

exports.create = function(req, res) {
    var stream = fs.createReadStream(req.file.path);
    var params = {
        Bucket: 'aws bucket',
        Key: req.file.filename,
        Body: stream,
        ContentLength: req.file.size,
        ContentType: 'audio/mp3'
    };
    var s3upload = s3.upload(params, options).promise();
    // return the `Promise`
    return s3upload
        .then(function(data) {
            console.log(data);
            return res.sendStatus(201);
        })
        .catch(function(err) {
            return handleError(err);
        });
}

我想到了。 请求超时时间不够长,无法完成上传,因此它再次发出了呼叫,依此类推。 为了解决该问题,我将请求的超时设置为0,为请求提供了完成上传所需的所有时间。 有了这个,它可以正确地将201响应返回给客户端。

exports.create = function(req, res) {
    req.setTimeout(0); // <= set a create request to no timeout length.
    var stream = fs.createReadStream(req.file.path);
    var params = {
        Bucket: 'aws bucket',
        Key: req.file.filename,
        Body: stream,
        ContentLength: req.file.size,
        ContentType: 'audio/mp3'
    };
    var s3upload = s3.upload(params, options).promise();
    // return the `Promise`
    s3upload
        .then(function(data) {
            console.log(data);
            return res.sendStatus(201);
        })
        .catch(function(err) {
            return handleError(err);
        });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM