[英]Spring: request body missing error when sent from client but works with postman?
[英]multer error boundary not found when request sent by node fetch but works when used with postman
我建立了我的节点 js 服务器以将我的图像保存到特定文件夹。 当使用 Postman 发送请求时它工作正常,但是当我使用节点获取时它失败了。
// server.js
const express = require("express")
const bodyParser = require("body-parser");
const multer = require("multer");
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "public/resources/icons");
},
filename: (req, file, cb) => {
cb(null, Buffer.from([file.originalname, Date.now()].join("_")).toString("base64")+".png");
}
})
const upload = multer({storage});
const server = express();
server.post("/api/putFile", upload.single("image"), (req, res, forward) => {
if(req.file) {
res.json(JSON.stringify({path: req.file.filename}));
} else {
res.status(400).send("bad file type given in form")
}
forward();
});
// server-utils.ts which is the file that requests to the server
export async function sendFile(file: File): Promise<{}> {
const submitURL = "/api/putFile";
const data: FormData = new FormData();
const buffer = await file.arrayBuffer()
data.append("image", Buffer.from(buffer).toString("binary"));
return await fetch(submitURL, {
method: "post",
body: data,
headers: {
"Content-Type": "multipart/form-data",
}
}).then((response) => {
return response.json();
}).then(JSON.parse)
}
我也尝试将File
直接提交给FormData
: data.append("image", file)
但发生了同样的错误。
当我使用 postman 作为multipart/form-data
发送 Post 请求时,它运行良好
首先, FormData
必须从节点模块form-data
导入,否则 fetch 将无法将请求视为 multipart/form-data。 然后必须删除Content-Type
header,以便 fetch auto 实现Content-Type
header。
这是要更改的内容:
// server-utils.js
import fetch from "node-fetch"
import FormData from "form-data"
export async function sendFile(file: File): Promise<any> {
const submitURL = "/api/putFile";
const data: FormData = new FormData();
data.append("image", file);
return await fetch(submitURL, {
method: "post",
body: data,
}).then((response) => {
return response.json();
}).then(JSON.parse)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.