无法使用 Fetch TYPESCRIPT POST a multipart/form-data
Cannot POST a multipart/form-data using Fetch TYPESCRIPT
我正在尝试获取下面的这段代码,我开始使用 fetch,所以我遇到了一些问题
import fetch, { Headers, RequestInit } from "node-fetch";
import FormData = require("form-data");
const exampleFile = fs.createReadStream(path.join(__dirname, "../lib/dummy.pdf"));
const myHeaders = new Headers();
myHeaders.append("Content-Type", "multipart/form-data");
const form = new FormData();
form.append("file", exampleFile);
const requestOptions: RequestInit = {
method: "POST",
headers: myHeaders,
body: form,
redirect: "follow"
};
await fetch(`https://api.mercadolibre.com/messages/attachments?access_token=${accessToken}`, requestOptions)
.then(response => response)
.then(result => console.log(result))
.catch(error => console.log("error", error));
但这会回应这个 JSON(它应该只是 MercadoLibre 附件的 ID):
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],
readable: true,
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: true,
_transformState: [Object],
[Symbol(kCapture)]: false
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://api.mercadolibre.com/messages/attachments?access_token=#######',
status: 400,
statusText: 'Bad Request',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 0
}
}
我的代码有什么问题?
更新:我能够通过排除 Content-Type 属性 来修复它,允许自动检测和设置边界和内容类型。
新代码:
const exampleFile = fs.createReadStream(path.join(__dirname, "../lib/dummy.pdf"));
const form = new FormData();
form.append("file", exampleFile);
const requestOptions: RequestInit = {
method: "POST",
body: form
};
await fetch(`https://api.mercadolibre.com/messages/attachments?access_token=${accessToken}`, requestOptions)
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.log("error", error));
我正在尝试获取下面的这段代码,我开始使用 fetch,所以我遇到了一些问题
import fetch, { Headers, RequestInit } from "node-fetch";
import FormData = require("form-data");
const exampleFile = fs.createReadStream(path.join(__dirname, "../lib/dummy.pdf"));
const myHeaders = new Headers();
myHeaders.append("Content-Type", "multipart/form-data");
const form = new FormData();
form.append("file", exampleFile);
const requestOptions: RequestInit = {
method: "POST",
headers: myHeaders,
body: form,
redirect: "follow"
};
await fetch(`https://api.mercadolibre.com/messages/attachments?access_token=${accessToken}`, requestOptions)
.then(response => response)
.then(result => console.log(result))
.catch(error => console.log("error", error));
但这会回应这个 JSON(它应该只是 MercadoLibre 附件的 ID):
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],
readable: true,
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: true,
_transformState: [Object],
[Symbol(kCapture)]: false
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://api.mercadolibre.com/messages/attachments?access_token=#######',
status: 400,
statusText: 'Bad Request',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 0
}
}
我的代码有什么问题?
更新:我能够通过排除 Content-Type 属性 来修复它,允许自动检测和设置边界和内容类型。
新代码:
const exampleFile = fs.createReadStream(path.join(__dirname, "../lib/dummy.pdf"));
const form = new FormData();
form.append("file", exampleFile);
const requestOptions: RequestInit = {
method: "POST",
body: form
};
await fetch(`https://api.mercadolibre.com/messages/attachments?access_token=${accessToken}`, requestOptions)
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.log("error", error));