如何恢复formData中的多个下载图像与express



你好,对不起,我的英语有点问题。我尝试上传许多图像,但在背面我只有一个图像,(我使用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 });
  1. 使用.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
});
  1. 使用.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
});
  1. 使用.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。

最新更新