Node.js上传到Amazon S3,但文件损坏

我通过我的CMS提交表单,其中包含图像和一些文本的文件select器。 代码运行&一个对象是在我的S3帐户创build正确的名称,但它是腐败的。 例如,我上传JPG图像,但是当我在s3仪表板中查看它们时,我只是看到一个黑屏。

任何帮助是极大的赞赏。

我的HTML表单:

<form enctype="multipart/form-data" action="updateSchedule" method="POST"> <input type="file" name="schedulepicture" id="schedulepicture"> <textarea rows="4" cols="50" id="ScheduleText" name="ScheduleText" maxlength="2000"> <button type="submit" id="updateschedulebutton">Update</button> </form> 

我的Node.JS脚本:

 router.post('/updateschedule', isLoggedIn, upload.single('schedulepicture'), function(req, res) { var scheduleImageToUpload; //Check if image was uploaded with the form & process it if (typeof req.file !== "undefined") { //Create Amazon S3 specific object var s3 = new aws.S3(); //This uploads the file but the file cannot be viewed. var params = { Bucket: S3_BUCKET, Key: req.file.originalname, //This is what S3 will use to store the data uploaded. Body: req.file.path, //the actual *file* being uploaded ContentType: req.file.mimetype, //type of file being uploaded ACL: 'public-read', //Set permissions so everyone can see the image processData: false, accessKeyId: S3_accessKeyId, secretAccessKey: S3_secretAccessKey } s3.upload( params, function(err, data) { if (err) { console.log("err is " + err); } res.redirect('../adminschedule'); }); } }); 

我相信你需要传递一个stream而不是文件path,你可以像这样使用fs.createReadStream:

 router.post('/updateschedule', isLoggedIn, upload.single('schedulepicture'), function(req, res) { var scheduleImageToUpload; //Check if image was uploaded with the form & process it if (typeof req.file !== "undefined") { //Create Amazon S3 specific object var s3 = new aws.S3(); var stream = fs.createReadStream(req.file.path) //This uploads the file but the file cannot be viewed. var params = { Bucket: S3_BUCKET, Key: req.file.originalname, //This is what S3 will use to store the data uploaded. Body: stream, //the actual *file* being uploaded ContentType: req.file.mimetype, //type of file being uploaded ACL: 'public-read', //Set permissions so everyone can see the image processData: false, accessKeyId: S3_accessKeyId, secretAccessKey: S3_secretAccessKey } s3.upload( params, function(err, data) { if (err) { console.log("err is " + err); } res.redirect('../adminschedule'); }); } });