gpt4 book ai didi

node.js - 如何使用 multipart/form-data header 和 native Node.js https.request 上传文件?

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:01 25 4
gpt4 key购买 nike

我正在尝试使用来自node.js的 native https.request从我的计算机上传文件。我的代码如下所示:

let query = require('https').request({
hostname: 'somehost.com',
path: '/path/to/upload',
headers: {'Content-Type': 'multipart/form-data'},
method: 'POST'
}, (res) => {
let data = '';
res.on("data", (chunk) => {
data += chunk.toString('utf8');
});
res.on('end', () => {
console.log("data");
})
});
query.on("error", (e) => {
console.error(e);
});
query.write(Buffer[
{key1: 1, file: require("fs").createReadStream("/path/to/file.txt")}
]); // I don't know how to put here
query.end();

我没有收到主机的任何响应,文件上传失败。我怎样才能做到这一点?

最佳答案

上传 multipart/form-data 时,Content-Type header 必须包含 boundary ,以指示每个“部分”在发布的数据中的位置。为了设置 The Multipart Content-Type 的边界,您可以使用form-data来自 NPM 的包。你可以set the header/boundary manually ,但是 form-data 包会为你处理这个问题,让你不必担心细节等。

为了在示例中使用表单数据,您需要执行以下操作:

  1. 创建一个新的 FormData 对象并附加相关部分:

    let formData = new require('form-data')();
    formData.append('key1', 1);
    formData.append('file', require("fs").createReadStream("/path/to/file.txt"));
  2. 使用 getHeaders 函数构建正确的 HTTP header :

    require('https').request({
    headers: formData.getHeaders(),
    // ...
    }
  3. 使用pipe以允许form-data处理您的数据并将其发送到服务器:

    formData.pipe(query);

    通过此更改,您不再需要调用 query.writequery.end - 对 pipe 的调用会处理那个。

为了完整起见,以下是包含我所描述的更改的最终代码:

let formData = new require('form-data')();
formData.append('key1', 1);
formData.append('file', require("fs").createReadStream("/path/to/file.txt"));

let query = require('https').request({
hostname: 'somehost.com',
path: '/path/to/upload',
method: 'POST',
headers: formData.getHeaders()
}, (res) => {
let data = '';
res.on("data", (chunk) => {
data += chunk.toString('utf8');
});
res.on('end', () => {
console.log(data);
})
});

query.on("error", (e) => {
console.error(e);
});

formData.pipe(query);

关于node.js - 如何使用 multipart/form-data header 和 native Node.js https.request 上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47565070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com