使用 fetch、FormData API 和 multer 发送文件:图片无法上传
Send File with fetch, FormData API and multer : image won't upload
我尝试在 fetch body 中发送一些 FormData,以使用 multer (nodeJS) 上传图像。
我试图为我的获取调用设置一个 Header "Content-Type": "multipart/form-data"
,但是当我这样做时,我遇到了一个 nodeJS 错误:
Error: Multipart: Boundary not found
然后我尝试删除 Content-Type
header,所以浏览器默认设置它,并且获取失败,我什至不进入我的 nodeJS 路由器。
下面是我的FormData准备方法:
handleChange = event =>
{
if(event.target.type === 'file')
{
const files = event.target.files;
var formData = new FormData();
for(var i = 0; i < files.length; i++)
{
formData.append('images[]', files[i], files[i].name);
}
//UPLOAD IMAGE METHOD
Image.upload(formData);
}
};
这是我的提取调用:
upload: async function(formData)
{
return fetch('http://localhost:8080/image/upload', {
method: 'post',
body: formData
})
}
这是我的控制器:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer({dest: __dirname + '/uploads/images'});
router.post('/upload', upload.array('images'), (req, res) => {
console.log('req.file', req.file, req.files, req.body);
return res.sendStatus(200);
});
module.exports = router;
之前由 app.use('/image', require('./controllers/imageController'));
路由,因此访问 url 是 http://localhost:8080/image/upload
响应 header 无 Content-Type:
Provisional headers are shown
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryi3lc9wCsnhrvAOAB
Origin: http://localhost:3000
Referer: http://localhost:3000/backoffice/catalog/edit/5d976d6b50fd7f3d008d0f16
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
images[]: (binary)
错误 Content-Type:
Error: Multipart: Boundary not found
谢谢大家的脑洞:) !
最后没看好地方:是我尝试上传的文件损坏了。我试过另一个,效果很好。
我尝试在 fetch body 中发送一些 FormData,以使用 multer (nodeJS) 上传图像。
我试图为我的获取调用设置一个 Header "Content-Type": "multipart/form-data"
,但是当我这样做时,我遇到了一个 nodeJS 错误:
Error: Multipart: Boundary not found
然后我尝试删除 Content-Type
header,所以浏览器默认设置它,并且获取失败,我什至不进入我的 nodeJS 路由器。
下面是我的FormData准备方法:
handleChange = event =>
{
if(event.target.type === 'file')
{
const files = event.target.files;
var formData = new FormData();
for(var i = 0; i < files.length; i++)
{
formData.append('images[]', files[i], files[i].name);
}
//UPLOAD IMAGE METHOD
Image.upload(formData);
}
};
这是我的提取调用:
upload: async function(formData)
{
return fetch('http://localhost:8080/image/upload', {
method: 'post',
body: formData
})
}
这是我的控制器:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer({dest: __dirname + '/uploads/images'});
router.post('/upload', upload.array('images'), (req, res) => {
console.log('req.file', req.file, req.files, req.body);
return res.sendStatus(200);
});
module.exports = router;
之前由 app.use('/image', require('./controllers/imageController'));
路由,因此访问 url 是 http://localhost:8080/image/upload
响应 header 无 Content-Type:
Provisional headers are shown
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryi3lc9wCsnhrvAOAB
Origin: http://localhost:3000
Referer: http://localhost:3000/backoffice/catalog/edit/5d976d6b50fd7f3d008d0f16
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
images[]: (binary)
错误 Content-Type:
Error: Multipart: Boundary not found
谢谢大家的脑洞:) !
最后没看好地方:是我尝试上传的文件损坏了。我试过另一个,效果很好。