使用Node.js发布带有文件的表单

时间:2017-06-07 10:10:08

标签: node.js forms curl file-upload

有一个用于创建文章的外部(我无法更改)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命令。

有什么建议吗?

P.S。一旦我有了一个可行的解决方案,我想要执行一项改进。我有文件内容,所以我更喜欢直接发送它而不创建文件+ createReadStream。我试图做那个Blobing上下文,但没有成功。

1 个答案:

答案 0 :(得分:0)

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

我的解决方案基于以下答案之一: Nodejs POST request 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")
}