2017-08-10 3 views
1

私のCMS経由でフォームのテキストのファイルピッカーを含むフォームを送信しています。コードは&で実行されます。オブジェクトはS3アカウントで正しい名前で作成されていますが、破損しています。たとえば、JPG画像をアップロードしていますが、s3ダッシュボードで見ると黒い画面が表示されます。Amazon S3へのNode.jsのアップロードは機能しますが、ファイルが破損しています

ご協力いただきまして誠にありがとうございます。

私の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'); 
 
    }); 
 
    } 
 
});

答えて

1

私はあなたの代わりに、ファイルのストリームを渡す必要が信じていますパスの場合は、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'); 
    }); 
    } 
}); 
関連する問題