使用NodeJS和Multer将图像上传到S3。如何上传整个文件onFileUploadComplete

时间:2015-06-17 17:20:35

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

我使用 NodeJS Multer 将文件上传到 S3

从表面上看,一切似乎都在运行,文件上传了,当我登录 AWS 控制台时,我可以在bucket中看到它们。但是,大多数情况下,当我按照文件链接时,文件被破坏,文件大小通常比原始文件小得多。

当文件到达服务器时,如果我log,文件大小是正确的,但在 S3 上它要小得多。例如,我刚上传了一个151kb的文件。 post请求正确记录文件大小,但在 S3 上,文件显示为81kb。

客户方:

uploadFile = (file) ->
    formData = new FormData()
    formData.append 'file', file


    xhr = new XMLHttpRequest()
    xhr.open "POST", "/upload-image", true
    # xhr.setRequestHeader("Content-Type","multipart/form-data");

    console.log 'uploadFile'

    xhr.onerror = ->
        alert 'Error uploading file'
    xhr.onreadystatechange = ->
        if xhr.readyState is 4
            console.log xhr.responseText

    xhr.send formData

服务器:

app.use(multer({ // https://github.com/expressjs/multer
      inMemory: true,
      limits : { fileSize:3000000 },
      rename: function (fieldname, filename) {
        var time = new Date().getTime();
        return filename.replace(/\W+/g, '-').toLowerCase() + '_' + time;
      },
      onFileUploadData: function (file, data, req, res) {
        var params = {
          Bucket: creds.awsBucket,
          Key: file.name,
          Body: data,
          ACL: 'public-read'
        };

        var s3 = new aws.S3();
        s3.putObject(params, function (perr, pres) {
          if (perr) {
            console.log("Error uploading data: ", perr);
          } else {
            console.log("Successfully uploaded data", pres);
          }
        });
      }
    }));

    app.post('/upload-image', function(req, res){
        if (req.files.file === undefined){
            res.end("error, no file chosen");
        } else if (req.files.file.truncated) {
            res.end("file too large");
        } else {
          console.log(req.files.file.size); //logs the correct file size
          var path = creds.awsPath + req.files.file.name;
          res.type('text/plain');
          res.write(path);
          res.end();
        };

    });

编辑:

file.buffer设置为body perma onFileUploadComplete似乎有效,但我觉得这不是正确的做事方式,可能会回到以后咬我这种方法是否正常,或者我应该注意这些问题吗?

0 个答案:

没有答案