将所有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上传