簡體   English   中英

如何使用npm的請求承諾在POST中添加文件?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM