使用 NodeJS 和 S3FS/multiparty 将文件上传到 Amazon S3
Upload a file to Amazon S3 with NodeJS and S3FS/multiparty
我正在使用多方和 S3FS 将文件上传到亚马逊 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的路径中:
my-bucket/files
而现在它正在 amazon s3 存储桶中写入临时文件路径:
my-bucket/files/home/ubuntu/www/html/sampleProject/public/files
知道为什么在写入文件时在 s3 存储桶中创建临时文件路径 'home/ubuntu/www/html/sampleProject/public/files'
吗?
我自己找到了解决方案,我发送给写入文件的文件名是错误的,我只是在从临时路径获取文件名时将 \
替换为 /
。
var filePath= 'home\ubuntu\www\html\sampleProject\public\files\myfile.jpg'.replace(/\/g, '/');
var fileName = filePath.substr(filePath.lastIndexOf('/')+1,filePath.length-1)
我正在使用多方和 S3FS 将文件上传到亚马逊 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的路径中:
my-bucket/files
而现在它正在 amazon s3 存储桶中写入临时文件路径:
my-bucket/files/home/ubuntu/www/html/sampleProject/public/files
知道为什么在写入文件时在 s3 存储桶中创建临时文件路径 'home/ubuntu/www/html/sampleProject/public/files'
吗?
我自己找到了解决方案,我发送给写入文件的文件名是错误的,我只是在从临时路径获取文件名时将 \
替换为 /
。
var filePath= 'home\ubuntu\www\html\sampleProject\public\files\myfile.jpg'.replace(/\/g, '/');
var fileName = filePath.substr(filePath.lastIndexOf('/')+1,filePath.length-1)