Загрузите файл в Amazon S3 с NodeJS и S3FS/multiparty
Я использую multiparty и S3FS для загрузки файлов в amazon s3, при записи потока файлов в 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 bucket:
my-bucket/files/home/ubuntu/www/html/sampleProject/public/files
Любая идея, почему путь к временному файлу 'home/ubuntu/www/html/sampleProject/public/files'
создать внутри s3 ведро при записи файла?
1 ответ
Решение
Я сам нашел решение, имя файла, которое я отправлял для записи файла, было неверным, я только заменил \
с /
при получении имени файла из временного пути.
var filePath= 'home\ubuntu\www\html\sampleProject\public\files\myfile.jpg'.replace(/\\/g, '/');
var fileName = filePath.substr(filePath.lastIndexOf('/')+1,filePath.length-1)