我有下面的节点/表达代码,它们将文件粘贴到我的端点//并将其存储在OS上。我在Node上比较陌生,发贴时看到这段代码正在创建两个文件。一个带有原始文件名,另一个带有似乎是uuid的文件名。在我的代码中,它使它创建两个文件而不是仅发布一个文件是什么?
const multer = require('multer')
const fs = require('fs')
const shell = require('shelljs')
const app = require('express')
const upload = multer({ dest: './upload' });
app.post('/upload', upload.single('file'), function(req, res) {
const tmp_path = req.file.path;
const target_path = './upload/' + req.file.originalname;
const src = fs.createReadStream(tmp_path);
const dest = fs.createWriteStream(target_path);
src.pipe(dest);
});
答案 0 :(得分:0)
您正在使用multer中间件并为其指定目标目录,因此它将在此处创建文件。然后,您将创建自己的WriteStream并再次写入。
答案 1 :(得分:0)
因为您上传了两次。一次在中间件中,一次在代码中。
为解决此问题,我的建议是将整个上传过程转移到路由之外:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "uploads/")
// you need to create uploads folder before than running the code
},
filename: function (req, file, cb) {
var originalname = file.originalname
var extension = originalname.split(".")
filename =
// you can edit here to build any custom name
file.originalname +
extension[extension.length - 1]
cb(null, filename)
}
})
var upload = multer({storage: storage})
var avatarFileUpload = upload.single('file')
然后在路由中使用 avatarFileUpload 中间件。