質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

17634閲覧

node.jsのrequestモジュールを使って別サーバにFileをPOSTする

iarik

総合スコア101

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/03/01 01:59

編集2017/03/01 07:35

やりたいこと

CSVファイルを受け付けて加工するAPIサーバを自作しました。以下の様なcurlコマンドを実行するとファイルを受け付けて処理してくれます。
このAPIをnode.jsのrequestモジュールでコールしたいです

curl -F "myFile=@sample.csv" -F "apikey=key" -F "user=testuser" "https://example.com/api/csv/import"

やってみたこと

以下のようなnode.jsを作成しましたが上手くファイルをPOSTする事ができずエラーとなってしまいます。

var request = require('request'); var fs = require('fs'); var msg = { 'apikey' : apiKey, 'user' : user, 'myFile' : fs.createReadStream('./sample.csv') }; var options = { url: 'https://example.com/api/csv/import', headers: { 'Content-Type': 'multipart/form-data' }, json: true, body: msg, timeout: 180000 //milliseconds }; request.post(options, function(err, response, body) { if(err){ console.log(err) }else{ console.log(body) }; });

発生したエラー

APIサーバ側で以下のエラーを検知しています。たぶんnode.jsのリクエストの指定方法が悪くエラーが出ていると考えております

"Error: Multipart: Boundary not found"

requestモジュールを使ってローカルにあるファイルを別サーバのPOSTする場合はどの様に設定を行いPOSTすれば宜しいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/03/01 02:34

まずはどのような症状が出ているのか、エラーメッセージは何かなどをご提示されると、より適切な回答が得られやすいかと思います。
iarik

2017/03/01 07:35

>> t_obara様 大変失礼致しました。エラー内容を追記致しました。
guest

回答2

0

form-dataを使用してPOSTすればいいと思いますが。
README.md

投稿2017/03/01 02:03

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iarik

2017/03/01 08:13

>>turbgraphics200様 ご教示ありがとございます。頂いたリンクを読み、コードを作成したところ上手く出来ました。
guest

0

自己解決

以下のようにコードを修正したところ、APIサーバの仕様に合わせて正しくPOSTリクエストすることが出来ました。ご参考までにプログラム記載致します。

var request = require('request'); var fs = require('fs'); var url = 'https://example.com/api/csv/import'; var formData = { 'myFile': fs.createReadStream('./sample.csv'), 'apikey' : 'apiKey', 'user' : 'user', 'timeout': '180000' //milliseconds }; request.post({url:url, formData:formData}, function(err, response, body) { if(err){ console.log(err) }else{ console.log(body) }; });

投稿2017/03/01 08:18

編集2017/12/21 09:56
iarik

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問