[英]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.