使用 multer 快速上传文件不适用于 urlencodedParser

express upload file with multer not working with urlencodedParser

我正在尝试使用 post 申请表上传图片。在我的 express.js 服务器中,我同时使用 multer 和 urlencodedParser,因为我将所有 html 输入作为 json 对象通过 post 请求正文加上一个选择文件,我正在用 multer 处理它。

这是表单的 HTML 代码:

<form action="http://localhost:8000/api/addOrgs" method="post">
    <div class="form-row">
        <!-- OTHER CODE -->
            <div class="form-group col-md-6">
                <label>Image or Logo</label>
                <input type="file" class="form-control" name="image" id="fileToUpload">
            </div>
        <button class="btn btn-primary">  Add the organization to the system</button>
    </div>
</form>

我已经设置了multer:

// add image to folder
var multer  = require('multer')

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, '../public/images/')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname)
    }
})

var upload = multer({ storage: storage })

这是快速 post 请求处理程序:

// to add a new organization to the list
app.post('/api/addOrgs', upload.single('imageToUpload'), urlencodedParser, (req, res)=> {
    try {
        var newobj = req.body;

        // want to change name of id in obj
        // add image name and delete image field
        newobj['img'] = newobj.image;
        delete newobj.image;

        // read orgs file
        let orgs = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../orgs.json')));
        
        //... OTHER CODE
        // send respond
        res.send('<h1>Successfully added!</h1><br><p>'+JSON.stringify(newobj, null, 4)+'</p></br><b>Now you can go <a href="/good">BACK</a></b>')
       // OTHER CODE
    } catch (e) {
        // ... OTHER CODE
    }
});

问题是我成功地通过 req.body 发送了在 json 对象中上传的文件名,但是 它没有将文件保存在文件夹中。问题是否来自对 app.post() 参数使用 urlencodedParser

或者我必须做些什么才能将文件保存在我的 app.post() 函数中吗?

文件的格式应具有 enctype="multipart/form-data" 属性。试试这个,它应该可以工作