1

我使用multiparty和S3FS將文件上傳到amazon s3,當將文件流寫入s3時,它會創建臨時文件路徑以及存儲桶路徑,例如:使用NodeJS和S3FS /多方上傳文件到Amazon S3

var S3FS = require('s3fs'); 
var s3fsImpl = new S3FS('my-bucket/files',{ 
    accessKeyId: config.amazonS3.accessKeyId, 
    secretAccessKey: config.amazonS3.secretAccessKey 
}); 

module.exports = function (app) { 
    app.post('/upload', function (req, resp) { 

     // get the file location 
     var file = req.files.file; 
     var stream = fs.createReadStream(file.path); 


      return s3fsImpl.writeFile(fileName,stream).then(function(){ 
       fs.unlink(file.path,function(err){ 
        if(err) 
         console.error(err); 
       }); 

       resp.send('done'); 

      }).catch(function (err) { 
       return resp.status(500).send({ 
        message: errorHandler.getErrorMessage(err) 
       }); 
      }); 

    }); 
}; 

的文件應該寫在S3路徑:

我的桶/文件

,而現在它寫在Amazon S3的桶中的臨時文件路徑:

my-bucket/files/home/ubuntu/www/html/sampleProject/public/files 

任何想法爲什麼臨時文件路徑'home/ubuntu/www/html/sampleProject/public/files'在寫入文件時在s3存儲桶中創建?

回答

3

我自己找到了解決方案,我發送的寫入文件的文件名是錯誤的,當從臨時路徑獲取文件名時,我只將\替換爲/

var filePath= 'home\ubuntu\www\html\sampleProject\public\files\myfile.jpg'.replace(/\\/g, '/'); 

var fileName = filePath.substr(filePath.lastIndexOf('/')+1,filePath.length-1) 
+1

建議使用'path'模塊以編程方式解析路徑而不是使用replace。這將確保它與平臺無關。 https://nodejs.org/api/path.html#path_path_resolve_paths – Sterex

+1

謝謝@Sterex,我用路徑模塊代替,當時我是nodejs的初學者:) –