上传文件时没有创建文件夹
No folder is being created upon uploading of files
我正在尝试将 pdf/xls/xlsx 上传到文件服务器,但每当我尝试使用 FormData 在我的后端发送文件时,都没有创建文件夹,也没有上传文件。
这是我在前端 (Vue) 的代码:
let toSubmit = {
document_title: this.document_title.toUpperCase(),
added_by: this.userInfo.employeeCode,
FileName: `${this.document_title.replace(/ +/g, "_").toUpperCase()}.${this.$refs.files.files[0].name.split(".").pop().toLowerCase()}`
}
const formData = new FormData
formData.append("toSubmit", JSON.stringify(toSubmit))
_.forEach(this.uploadFiles, file=>{
formData.append("files", file)
})
const url = `${this.api}add/template/document`
axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data',
dataType: 'json',
}
}).then(res=>{
console.log('document template', res.data)
})
在我的后端,我使用 multer 上传文件,但我不知道问题出在 multer 本身还是我的代码中缺少某些东西。无论如何,这是我在后端(节点)的代码:
API
router.post("/add/template/document", uploadTemplate.array("files"), (req, res)=>{
let myData = JSON.parse(req.body.toSubmit)
res.send(myData)
})
正在上传
const uploadTemplate = multer({storage: storageTemplate});
const storageTemplate = multer.diskStorage({
destination: (req, file, cb) => {
var dir = `./uploads/DocumentTemplates/`;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
cb(null, dir);
},
filename: function(req, file, cb){
let myData = JSON.parse(req.body.toRequest);
let fileName = myData.FileName
let new_filename = `${fileName}`
cb(
null,
new_filename
)
}
})
我还是不明白为什么没有创建文件夹。我错过了什么吗?
您正在创建一个没有递归标志的子文件夹,这就是未创建该文件夹的原因
另外,multer中间件中没有body
,只有file
,所以你不能像这样发送自定义数据到文件,你需要改变上传中间件
- 要创建子文件夹,请添加此标志:
fs.mkdirSync(dir, {recursive: true});
multer
中没有正文,使用file
(可以添加mimetype验证,检查是否只上传了某些类型):
filename: function(req, file, cb){
console.log('file', file);
// validate expected file against file.mimetype
// if it fails, return error: cb(yourErrorMessage, null);
cb(
null,
file.originalname // handle on front-end
)
}
在前端:
formData.append("files", file, 'filename goes here');
我正在尝试将 pdf/xls/xlsx 上传到文件服务器,但每当我尝试使用 FormData 在我的后端发送文件时,都没有创建文件夹,也没有上传文件。
这是我在前端 (Vue) 的代码:
let toSubmit = {
document_title: this.document_title.toUpperCase(),
added_by: this.userInfo.employeeCode,
FileName: `${this.document_title.replace(/ +/g, "_").toUpperCase()}.${this.$refs.files.files[0].name.split(".").pop().toLowerCase()}`
}
const formData = new FormData
formData.append("toSubmit", JSON.stringify(toSubmit))
_.forEach(this.uploadFiles, file=>{
formData.append("files", file)
})
const url = `${this.api}add/template/document`
axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data',
dataType: 'json',
}
}).then(res=>{
console.log('document template', res.data)
})
在我的后端,我使用 multer 上传文件,但我不知道问题出在 multer 本身还是我的代码中缺少某些东西。无论如何,这是我在后端(节点)的代码:
API
router.post("/add/template/document", uploadTemplate.array("files"), (req, res)=>{
let myData = JSON.parse(req.body.toSubmit)
res.send(myData)
})
正在上传
const uploadTemplate = multer({storage: storageTemplate});
const storageTemplate = multer.diskStorage({
destination: (req, file, cb) => {
var dir = `./uploads/DocumentTemplates/`;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
cb(null, dir);
},
filename: function(req, file, cb){
let myData = JSON.parse(req.body.toRequest);
let fileName = myData.FileName
let new_filename = `${fileName}`
cb(
null,
new_filename
)
}
})
我还是不明白为什么没有创建文件夹。我错过了什么吗?
您正在创建一个没有递归标志的子文件夹,这就是未创建该文件夹的原因
另外,multer中间件中没有body
,只有file
,所以你不能像这样发送自定义数据到文件,你需要改变上传中间件
- 要创建子文件夹,请添加此标志:
fs.mkdirSync(dir, {recursive: true});
multer
中没有正文,使用file
(可以添加mimetype验证,检查是否只上传了某些类型):
filename: function(req, file, cb){
console.log('file', file);
// validate expected file against file.mimetype
// if it fails, return error: cb(yourErrorMessage, null);
cb(
null,
file.originalname // handle on front-end
)
}
在前端:
formData.append("files", file, 'filename goes here');