我已经看到了几乎所有与此相关的答案,建议在nodejs中使用FormData
的某个变体来构建多部分表单。
我希望不使用FormData
库也能达到同样的效果,而只使用请求头和请求主体的字符串。
只有one answer提示了如何实现这一点,但是该解决方案在字符串有效负载上使用了一个stringify函数,所以我不确定正确的字符串化主体应该是什么样子。
不管怎么样,我已经走到这一步了;
import { RequestOptions } from "http"
const path: 'url/'
const method: 'POST'
const body = `--BOUNDARY
\nContent-Disposition: form-data; name="file"; filename="test.txt"
\nContent-Type: text/plain
\nThis is the content of the file
\n--BOUNDARY
\nContent-Disposition: form-data; name="form-field-one"
\nexample1
\n--BOUNDARY
\nContent-Disposition: form-data; name="form-field-two"
\nexample2
\n--BOUNDARY--`
const headers = {
'content-type': 'multipart/form-data; boundary=BOUNDARY',
'content-length': String(Buffer.byteLength(body))
}
const options = {
path,
method,
headers,
body
}
const response = await execute(options)
我不能创建一个完全最小化的复制,因为我不被允许发布execute函数的内容,但是我可以描述我需要使用的函数签名(这就是为什么我需要使用字符串方法)。
不管怎样,我认为这个函数只是使用了基本的内置nodejsx 1 m2n1x库。
import { RequestOptions } from "http"
const execute = async (options: RequestOptions): Promise<any> => { ... }
我得到了一个错误使用这个,但错误是没有帮助的,在所有由于内部的函数。
无论如何,我相信只使用POST请求的主体和头部,而不使用额外的库来转换主体数据,就可以复制发送多部分表单(包含文件和表单字段)。
我的字符串是一个成功的Postman请求多部分表单请求的修改输出。
有人能指出我做错了什么吗?
1条答案
按热度按时间llmtgqce1#
几点:
...
中的每一行都以换行符结束,但下一行以\n
开始,这又增加了一个换行符,导致不需要的空行。\r
作为每行的最后一个字符。试试这个: