你好,对不起,我的英语有点问题。我尝试上传许多图像,但在背面我只有一个图像,(我使用React express强大的cloudinary(这是我的代码前沿:
const [arrayFiles, setArrayFiles] = useState([]);
const handleFiles = (e) => {
let arrayUpload = [...arrayFiles];
arrayUpload.push(e.target.files[0]);
setArrayFiles(arrayUpload);
};
const handleSubmit = async (e) => {
arrayFiles.forEach((file) => {
formData.append("image", file);
});
const response = await axios.post(
"http://localhost:3100/offer/publish",
formData
);
这是我的代码,但req.files=>只有一张图片我的页面路线:
router.post("/offer/publish", async (req, res) => {
console.log(req.files);
const result = await cloudinary.uploader.upload(req.files.image.path, {
folder: `api/leboncoin/offers/${newOffer._id}`, // _id vient de la création du newOffer au dessus
public_id: "preview",
cloud_name: process.env.CLOUDINARY_NAME,
});
我的页面index.js:
page index.js :
const express = require("express");
const formidable = require("express-formidable");
const mongoose = require("mongoose");
const cloudinary = require("cloudinary").v2;
const cors = require("cors");
const app = express();
app.use(cors());
app.use(formidable({ multiples: true }));
在设置multer.single
时,req.file
中只有一个文件
使用multer
有三种方法可以处理多个文件上传,每种方法都有不同的品味。
假设你有一个基本多路
const storage = multer.diskStorage({
destination: "public/data/",
filename: function(req, file, cb){
// You may change this to however you want, only affect your file name
crypto.randomBytes(20, (err, buf) => {
cb(null, buf.toString("hex") + path.extname(file.originalname))
})
}
});
const upload = multer({ storage: storage });
- 使用
.any()
接受所有通过连线的文件。一组文件将存储在req.files
中。警告:请确保始终处理用户上传的文件。永远不要将multer添加为全局中间件,因为恶意用户可能会将文件上传到您没有预料到的路由。仅在处理上传文件的路线上使用此功能。
router.post("/offer/publish",upload.any(), async (req, res) => {
console.log(req.files); // Should give you an array of files
// Do anything else
});
- 使用
.array(fieldname[, maxCount])
接受一个文件数组,所有文件的名称都为fieldname
。如果上载了超过maxCount
个文件,则可以选择出错。文件数组将存储在req.files
中。
router.post("/offer/publish",upload.array('someFieldName', 10), async (req, res) => {
console.log(req.files); // Should give you an array of files
// Do anything else
});
- 使用
.fields(fields)
接受由字段指定的文件组合。具有文件数组的对象将存储在req.files
中。
字段应该是一个具有名称的对象数组,并且可以选择maxCount
。示例:
router.post(
"/offer/publish",
upload.fields([
{
name: "image",
maxCount: 1,
},
{
name: "audio",
maxCount: 1,
},
]),
async (req, res) => {
console.log(req.files.image[0]);
console.log(req.files.audio[0]);
// Do anything else
}
);
就你的情况而言,我建议你选择方案2。