节点提取发送请求时未找到多个错误边界,但在与邮递员一起使用时有效
multer error boundary not found when request sent by node fetch but works when used with postman
我建立了我的节点 js 服务器来将我的图像保存到特定文件夹。当使用 Postman 发送请求时它工作正常但是当我使用 node-fetch 时它失败了。
// 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)
但同样的错误发生了。
当我用邮递员 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)
}
我建立了我的节点 js 服务器来将我的图像保存到特定文件夹。当使用 Postman 发送请求时它工作正常但是当我使用 node-fetch 时它失败了。
// 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)
但同样的错误发生了。
当我用邮递员 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)
}