答案 0 :(得分:0)
由于您使用的是multer
,因此将upload.single()
function更改为upload.array()
。
例如:
app.post("/addItem",
upload.array('product-image', 4), // 'product-image' is field name and 4 is the max number of files allowed
(req, res) => {
console.log(req.files);
// ... rest of the logic
}
)
Change current <input>
允许多个文件:
<input type="file" name="product-image" onChange={this.fileChangeHandler} multiple>
现在保存用户选择的所有not only the event.target.files[0]
图像:
fileChangeHandler(event) {
let files = event.target.files
this.setState({ selectedFiles: files })
}
现在add them in FormData
并照常上传:
let formData = new FormData()
formData.append("product-image", this.state.selectedFiles)
就是这样!希望对您有所帮助。
PS:我认为不应将文件添加到状态中。您可以简单地将它们添加到类变量中。在this answer中,我解释了为什么以及如何做到这一点。
更新:
您现在需要遍历文件。您的/addItem
端点的代码如下所示:
app.post("/addItem", upload.array('product-image', 4), (req, res) => {
console.log(req.files);
let paths = [];
req.files.forEach(file => {
console.log("new file location", file.path)
let extension = file.originalname.split(".").pop()
fs.rename(file.path, file.path + "." + extension, () => {})
paths.push("/" + file.filename + "." + extension);
});
console.log("body", req.body)
let itemToStore = {
paths: paths, // notice this `paths` now, it was `path`
description: req.body.description
}
console.log("we are adding", itemToStore)
itemData.push(itemToStore)
console.log("updated itemData:", itemData)
res.send(JSON.stringify(itemData))
})
我没有修改您的代码,只是添加了一个循环。您的'path' of undefined
错误应该消失了。