【问题标题】:File Uploading to S3, but times out and file currupt文件上传到 S3,但超时和文件损坏
【发布时间】:2014-11-16 05:00:11
【问题描述】:

下面是我使用 NodeJS 和 aws-sdk 将文件上传到 S3 的代码。一切似乎都很好,但是浏览器只是挂起。此外,当我尝试在 S3 上打开图像时,它显示已损坏。

module.exports = function(app) {


    app.post('/upload', function(req, res){
        var AWS = require('aws-sdk');
        var accessKeyId =  process.env.AWS_ACCESS_KEY;
        var secretAccessKey = process.env.AWS_SECRET_KEY;

        //pull var from heroku else send to dev
        AWS.config.update({
            accessKeyId: accessKeyId,
            secretAccessKey: secretAccessKey
        });

        var s3 = new AWS.S3();
        var file = req.files.filechooser;
        if (file) {

            var params = {
                Bucket: 'mybucket',
                Body: new Buffer(file, 'binary'),
                ACL:'public-read',
                ContentType: file.type,
                Key: "ugc/" + file.name,
                ContentLength: file.size
            };
            s3.putObject(params, function(err, data){
                if (err) {
                    console.log("Error uploading data: ", err);
                } else {
                    console.log("Successfully uploaded data to myBucket/myKey");
                }
            }).
                on('httpUploadProgress', function(chunk) {
                    console.log("Uploaded", chunk.loaded, "of", chunk.total, "bytes");
                }).
                on('httpDone', function() {
                    console.log("done");
                });

            console.log("called");
        } else {
            console.log('Nothing to upload.');
        }
    });
}

【问题讨论】:

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


    【解决方案1】:

    您需要完成对 putObject 的调用,在为侦听器重新注册之后,才能使用 send 实际开始上传。默认情况下,如果为返回 Response 的 S3 方法提供回调,则必须使用 send() 手动发起请求;

                on('httpUploadProgress', function(chunk) {
                    console.log("Uploaded", chunk.loaded, "of", chunk.total, "bytes");
                }).
                on('httpDone', function() {
                    console.log("done");
                }).
                send(); // Actually initiate the request
    

    详情。

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 1970-01-01
      • 2011-06-21
      • 2018-12-30
      • 2018-01-16
      • 2020-09-27
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多