【发布时间】:2022-11-09 22:00:42
【问题描述】:
在将请求传输到服务器之前,我使用 Next.js api 作为中间件,我正在尝试发送带有文件的 multipart/formdata 请求,如果我直接从客户端调用后端 API 并使用 @ 987654322@ 对象,我编写了 Next API 来解析该表单数据,形成一个新的表单数据(这次是服务器端)并调用后端 API,但失败了。
这是代码:
import axios from "axios";
import formidable from "formidable";
import FormData from "form-data";
import type { NextApiRequest, NextApiResponse } from "next";
import { getSession } from "next-auth/react";
//
import BlogAPIs from "utils/apis/BlogAPIs";
export const config = {
api: {
bodyParser: false,
},
};
export default async (req: NextApiRequest, res: NextApiResponse) => {
try {
const session = await getSession({ req });
const formData = new FormData();
const fs = require("fs");
const data: { fields: any; files: any } = await new Promise(
(resolve, reject) => {
const form = new formidable.IncomingForm();
form.parse(req, (err: any, fields: any, files: any) => {
if (err) reject({ err });
resolve({ fields, files });
});
}
);
["title", "content", "description", "thumbnail"].map((key) => {
data.fields[key] && formData.append(key, data.fields[key]);
data.files[key] &&
formData.append(key, fs.createReadStream(data.files[key].filepath));
});
let config = {
method: "post",
url: `${process.env.API_BASE_URL}/blogs/`,
headers: {
Authorization: `Bearer ${session?.backendToken as string}`,
...formData.getHeaders(),
},
data: formData,
};
await axios(config);
res.status(200).json("Succesfully added blog");
} catch (error: any) {
res.status(700).json(error.message);
}
};
我似乎无法弄清楚我在这里做错了什么......
【问题讨论】:
-
嗨,你设法解决了这个问题吗?介意发布答案吗?
-
我记得在这个文件上更改了解析器,然后将多部分数据流式传输到后端,将在一段时间内发布代码
标签: reactjs typescript axios next.js multipartform-data