使用抓取,FormData API和multer发送文件:图片不会上传

时间:2019-10-19 13:24:18

标签: javascript upload fetch multipartform-data multer

我尝试在获取主体中发送一些FormData,以便使用multer(nodeJS)上传图像。

我尝试为我的提取调用设置标头"Content-Type": "multipart/form-data",但是当我这样做时,出现了nodeJS错误:

  

错误:多部分:未找到边界

然后我尝试删除Content-Type标头,因此浏览器默认对其进行了设置,并且提取失败,甚至没有输入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'));路由,因此访问的网址为http://localhost:8080/image/upload

没有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错误:

  

错误:多部分:未找到边界

谢谢大家的大脑:)!

1 个答案:

答案 0 :(得分:0)

最后,我没看清楚这个地方:正是我尝试上传的文件已损坏。我尝试了另一种,效果很好。