繁体   English   中英

节点获取发送请求时未找到多重错误边界,但与 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直接提交给FormDatadata.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM