使用NodeJS和S3FS / multiparty将文件上传到Amazon S3

时间:2015-06-24 13:38:02

标签: node.js amazon-web-services amazon-s3 amazon-cloudfront

我正在使用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中:

我的桶/文件

现在它正在亚马逊s3桶中写入临时文件路径:

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

在编写文件时,为什么会在s3存储桶中创建临时文件路径'home/ubuntu/www/html/sampleProject/public/files'

1 个答案:

答案 0 :(得分:3)

我自己找到了解决方案,我发送到写文件的文件名错了,我从temp路径获取文件名时只用\替换/

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

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