簡體   English   中英

使用Node.js發布帶有文件的表單

[英]Post form with file using Node.js

有一個用於創建文章的外部(我無法更改)API。 使用此API,我成功以這種方式創建了一篇文章:

curl -F "article[id]=607822" -F "article[file]=@/article_file_example/article" 'https://api/v2/articles'

如何使用Node.js(最好是axios)在http請求之后執行此操作?

該代碼對於Linux和Windows均適用,因此我不能使用require('child_process')。exec

我嘗試了以下方法:

    const formData = {
        'id': 607822,
        file: fs.createReadStream(filePath), //filePath is the absolute path to the file
    };

    axios.post('https://api/v2/articles', {article: formData});

但是API響應是驗證錯誤,這意味着我沒有成功模仿curl命令。

有什么建議么?

PS:一旦有了可行的解決方案,我也想做一個改進。 我有文件內容,因此我更喜歡直接發送而不創建文件+ createReadStream。 我試圖做到這一點Blobing上下文,但沒有成功。

看起來axios不支持發送multipart / form-data: https : //github.com/mzabriskie/axios/issues/789

我的解決方案基於以下答案之一: Node.js POST請求multipart / form-data

我使用了restler模塊。

我不能像下面那樣發送數據:

{
    article: {
        'id': 607822,
        file: restler.file(filePath, null, stats.size, null, "text/plain")
    }
}

因為服務器未正確檢索到它。

所以我不得不將其轉換為:

{
    'article[id]': 607822,
    'article[file]': restler.file(filePath, null, stats.size, null, "text/plain")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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