gpt4 book ai didi

node.js - multer:动态目标路径

转载 作者:行者123 更新时间:2023-12-02 19:05:39 24 4
gpt4 key购买 nike

我正在编写一个 Node 应用程序,我正在寻找在服务器上上传文件的东西。当只有一个静态目录时,我可以上传文件。但我需要为每个用户创建目录,然后根据登录的用户将文件上传到这些目录。我查了一下内容,但我尝试的所有内容都以错误结束:ENOENT:没有这样的文件或目录,打开...错误。我目前正在尝试做的是这个 -

let storage = multer.diskStorage({
destination: function(req, file, cb) {
let dest = path.join(__dirname, './documents', 'somenameigetfromtheuser');
let stat = null;
try {
stat = fs.statSync(dest);
}
catch (err) {
fs.mkdirSync(dest);
}
if (stat && !stat.isDirectory()) {
throw new Error('Directory cannot be created');
}
cb(null, dest);
}
});

let upload = multer({
storage: storage,
dest: 'documents/'
});

app.post('/testUpload', upload.single('testfile'), (req, res) => {
res.json({
test: 'test'
})
});

有一个similar question这已经得到回答,但它对我来说不起作用,因为我想要来自请求对象的目录名称。

当我在 multer 初始化中删除存储属性时,文件将以随机名称存储在文档目录中。我希望该文件具有其原始名称,并且希望将其存储在从 req 对象获取目录名称的目录中。
帮帮小弟吧,谢谢!

最佳答案

已编辑

参见https://github.com/expressjs/multer#diskstorage

Note that req.body might not have been fully populated yet. It depends on the order that the client transmits fields and files to the server.

因此,首先在临时目录中写入文件,从 req 中读取目录名称并移动文件:

fs = require('fs-extra'); //npm install fs.extra
...

var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../tempDir/')
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
});

var upload = multer({
storage: storage
}).single('file');

upload(req, res, function (err) {
if (err) {
res.json({});
return;
}

var dir = JSON.parse(req.body.data).directory;
var filename = req.file.filename;

fs.move('../tempDir/' + fileName, '../tempDir/' + dir + '/' + fileName, function (err) {
if (err) {
return console.error(err);
}

res.json({});
});

});

关于node.js - multer:动态目标路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com