将所有multer上传的文件移动到Nodejs中的新目的地

Posted

技术标签:

【中文标题】将所有multer上传的文件移动到Nodejs中的新目的地【英文标题】:move all multer uploaded files to a new destination in Nodejs 【发布时间】:2019-01-12 02:19:20 【问题描述】:

我正在尝试创建一个包含两个字段的上传表单(从您的电脑中选择要上传的文件,以及一个下拉菜单,其中包含服务器文件夹 1、文件夹 2、文件夹 3 上的几个目的地)。为此,我正在使用 multer 和 express

我希望用户能够一次上传多个文件,并且用户有一个下拉菜单来选择在服务器上存储文件的位置。由于用户会在表单中给我们路径,所以我必须将文件上传到临时文件夹,然后将它们移动到用户选择的目的地。

我在上传单个文件的时候找到了很多解决方案,但是我不知道如何处理多个文件。

这是我正在使用的代码

app.set('view engine', 'ejs');

app.get('/', (req, res) => 
    res.render('index');
);


var temppath = './uploads';


var storage = multer.diskStorage(
    destination: function (req, file, callback) 
        var dir = temppath;
        if (!fs.existsSync(dir))
            fs.mkdirSync(dir);
        
        callback(null, dir);
    ,
    filename: function (req, file, callback) 
        callback(null, file.originalname);

    
);

var fs = require('fs')

app.use( express.static( "public" ) );


var upload = multer(storage: storage).array('files', 12);
app.post('/upload', function (req, res, next) 
    upload(req, res, function (err) 
        if (err) 
            return res.end("Something went wrong:(");
            //console.log (req.body);
        
        res.end("Upload completed.");
        console.log (req.body.pathselector) ;
        //move file from tempfolder to choosen path
        //'req.body.pathselector' is the path that the user will choose from the upload form
        //sth like fs.rename from temppath/filename to req.body.pathselector/same_filename (no need to rename files);




    );
)

app.listen(3000);
console.log("runnig on :3000");

希望有人能帮助解决这个问题,在此先感谢

【问题讨论】:

【参考方案1】:

我找到了解决办法。

基本上,这与您用于移动单个文件的命令相同,但您必须遍历文件数组。

逻辑是:

res.end("Upload completed.");
        newDest = req.body.pathselector ;

        filesArray = req.files ;

        //move file from tempfolder to choosen path
        //'req.body.pathselector' is the path that the user will choose from the upload form
        //sth like fs.rename from temppath/filename to req.body.pathselector/same_filename (no need to rename files);

        for (var item in filesArray) 
        var oldPath = filesArray[item].path;
        // the delimiter is usually / but on windows it's \
        if ( os.platform() == 'Windows_NT')
            var delimiterOFthisOS = '\\';
        else
            var delimiterOFthisOS = '/';
        

        var newPath = newDest + delimiterOFthisOS + filesArray[item].filename ;

        fs.rename(oldPath, newPath, function (err) 
          if (err) throw err
          console.log('Successfully renamed - AKA moved!')
        )

【讨论】:

以上是关于将所有multer上传的文件移动到Nodejs中的新目的地的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?

使用 multer-s3 nodejs 将图像上传到亚马逊 s3

使用 multer 和 nodejs 将图像上传到谷歌云存储时出错

如何在nodejs中使用sharp调整图像大小然后使用multer上传

如何在nodejs中使用sharp调整图像大小然后使用multer上传

使用 nodejs、multer 和 cloudinary 上传大型视频文件