[英]How to add files in a POST using request-promise of npm?
我正在尝试使用npm的“request-promise”发送Curl请求。 我要发送的卷曲如下:
`curl \
-H "Content-Type: multipart/form-data" \
-F "original=@./${parent_path}" \
-F "modified=@./${version_path}" \
-o "${out_path}" \
${URI}`
我在节点中的代码是:
BIMFile.findOne({ _id: responseDB.parent_id })
.then(parent => {
parent_path = parsePath(parent.path);
version_path = parsePath(responseDB.path);
console.log("PARENT!", parent_path, version_path);
const URI =
`${protocol}://${host_img_diff}:${port_img_diff}/diff`
out_path = version_path + '.tmp.jpg';
request.post({
url: URI,
formData: {
file: fs.createReadStream(parent_path),
file: fs.createReadStream(version_path)
}
}).then((apiResponse) => {
console.log('apiUPDATEResponse', apiResponse);
})
结果是:
Unhandled rejection StatusCodeError: 400 - "<!DOCTYPE HTML PUBLIC
\"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>400 Bad
Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a re
quest that this server could not understand.</p>\n"
at new StatusCodeError (/backend/node_modules/request-promise-
core/lib/errors.js:32:15)
at Request.plumbing.callback (/backend/node_modules/request-promise-
core/lib/plumbing.js:104:33)
at Request.RP$callback [as _callback] (/backend/node_modules/request-
promise-core/lib/plumbing.js:46:31)
at Request.self.callback (/backend/node_modules/request/request.js:185:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/backend/node_modules/request/request.js:1161:10)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous>
(/backend/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:313:30)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1055:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
服务器返回以下消息:
xxx.xx.x.xx - - [05/Apr/2019 10:00:15] "POST /diff HTTP/1.1" 400 -
如您所见,服务器无法理解发布请求。 有谁知道如何正确添加文件?
使用formData
发送文件就像你正在做的那样,但是你遇到的一个问题是你在同一个属性中设置了两个文件,并且只设置了最后一个文件。
console.log({ file: 1, file: 2 });
因此,如果file
可以接收多个文件,则需要使用数组
const formData = {
file: [
fs.createReadStream(parent_path),
fs.createReadStream(version_path)
]
}
如果您需要其他元数据, request
模块也提供了一种方法 :
使用带有样式的'options'对象传递可选的元数据:
{value: DATA, options: OPTIONS}
用例:对于某些类型的流,您需要手动提供“文件”相关信息。
有关选项的更多信息,请参阅form-data
README: https : //github.com/form-data/form-data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.