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

我正在使用NodeJSMulter将file upload到S3

从表面上看,所有东西似乎都在工作,文件被上传了,当我login到AWS控制台时,我可以在bucket看到它们。 但是,大多数时候,当我按照文件的链接,文件被打破,文件的大小通常比原来的文件小得多。

当文件到达服务器时,如果我log ,文件大小是正确的,但是在S3上它是小得多的。 比如我刚刚上传了一个151kb的文件。 post请求正确地logging文件大小,但在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设置为perma onFileUploadComplete似乎可行,但我有一种感觉,这不是正确的做事方式,以后可能会再来咬我。 这种方法好吗,还是有问题,我应该知道这样做?