上传多个文件(Multer,NewFormData())
Upload Multipe Fille (Multer, New FormData ())
我使用 multer 将图像上传到 site.I 使用 multer 将多个文件加载到我使用 new FormData()[ 的表单=31=]:
多配置
//Save image in browswe memory
const multerStorage = multer.memoryStorage();
//Check if uploaded fille is an image
const multerFilter = (req,file,cb)=>{
if(file.mimetype.startsWith('image')){
cb(null,true)
} else{
cb(new AppError('Not an image! Please upload only images', 400),false);
}
}
//Allow upload
const upload = multer({
storage:multerStorage,
fileFilter:multerFilter
});
exports.uploadPostImages = upload.fields([
{name:'images',maxCount:4}
]);
exports.resizePostImages = catchAsync(async(req,res,next) =>{
if(!req.files) return next();
req.body.images = [];
await Promise.all(req.files.images.map(async(file, i) => {
const filename = `post-image--${req.user.id}--${Date.now()}-${i+1}--specialSoft.jpeg`;
await sharp(file.buffer)
.resize(1200,800)
.toFormat('jpeg')
.jpeg({quality:95})
.toFile(`public/post-photo/${filename}`);
req.body.images.push(filename);
})
);
next();
});
数据是从我使用 new FormDate() 的表单输入数据库的,但问题是当我尝试加载多个图像时,只有一个加载.
//Create Post
let createPost = document.querySelector('.createNew--post--creativePoint');
if(createPost){
createPost.addEventListener('submit',(crPos)=>{
crPos.preventDefault();
const postData = new FormData();
postData.append('title',document.getElementById('creative---Point19981022-create--newPostTitle').value);
postData.append('description',document.getElementById('creative---Point19981022--newPostDescription').value);
postData.append('datePost',document.getElementById('creative---Point19981022--dataNow').value);
postData.append('images',document.getElementById('creative---Point19981022--newPostPhoto').files[0]);
createPostFnc(postData);
});
}
我尝试使用 for 循环
调整代码
let filesImg = document.getElementById('creative---Point19981022--newPostPhoto').files;
const postData = new FormData();
for (let p = 0; p < filesImg.length; p++) {
postData.append(filesImg[p]);
}
但是我有一个错误。
main.js:216 Uncaught TypeError: Failed to execute 'append' on 'FormData': 2 arguments required, but only 1 present.
at HTMLFormElement.eval
如何解决这个问题并加载多个文件。
如错误所示,调用 append 函数时需要两个参数,如果要发送图像名称则需要三个参数,如文档中所示。
所以应该是
for (let p = 0; p < filesImg.length; p++) {
postData.append('images', filesImg[p]);
}
我使用 multer 将图像上传到 site.I 使用 multer 将多个文件加载到我使用 new FormData()[ 的表单=31=]:
多配置
//Save image in browswe memory
const multerStorage = multer.memoryStorage();
//Check if uploaded fille is an image
const multerFilter = (req,file,cb)=>{
if(file.mimetype.startsWith('image')){
cb(null,true)
} else{
cb(new AppError('Not an image! Please upload only images', 400),false);
}
}
//Allow upload
const upload = multer({
storage:multerStorage,
fileFilter:multerFilter
});
exports.uploadPostImages = upload.fields([
{name:'images',maxCount:4}
]);
exports.resizePostImages = catchAsync(async(req,res,next) =>{
if(!req.files) return next();
req.body.images = [];
await Promise.all(req.files.images.map(async(file, i) => {
const filename = `post-image--${req.user.id}--${Date.now()}-${i+1}--specialSoft.jpeg`;
await sharp(file.buffer)
.resize(1200,800)
.toFormat('jpeg')
.jpeg({quality:95})
.toFile(`public/post-photo/${filename}`);
req.body.images.push(filename);
})
);
next();
});
数据是从我使用 new FormDate() 的表单输入数据库的,但问题是当我尝试加载多个图像时,只有一个加载.
//Create Post
let createPost = document.querySelector('.createNew--post--creativePoint');
if(createPost){
createPost.addEventListener('submit',(crPos)=>{
crPos.preventDefault();
const postData = new FormData();
postData.append('title',document.getElementById('creative---Point19981022-create--newPostTitle').value);
postData.append('description',document.getElementById('creative---Point19981022--newPostDescription').value);
postData.append('datePost',document.getElementById('creative---Point19981022--dataNow').value);
postData.append('images',document.getElementById('creative---Point19981022--newPostPhoto').files[0]);
createPostFnc(postData);
});
}
我尝试使用 for 循环
调整代码 let filesImg = document.getElementById('creative---Point19981022--newPostPhoto').files;
const postData = new FormData();
for (let p = 0; p < filesImg.length; p++) {
postData.append(filesImg[p]);
}
但是我有一个错误。
main.js:216 Uncaught TypeError: Failed to execute 'append' on 'FormData': 2 arguments required, but only 1 present.
at HTMLFormElement.eval
如何解决这个问题并加载多个文件。
如错误所示,调用 append 函数时需要两个参数,如果要发送图像名称则需要三个参数,如文档中所示。
所以应该是
for (let p = 0; p < filesImg.length; p++) {
postData.append('images', filesImg[p]);
}