2019-07-09に更新

Faradayで変数内のデータをファイルとして送信する

Faradayを使うと簡単にファイルをmultipart形式でPOSTしてアップロードしたりすることができる。

具体的にはUploadIOを使うことで簡単に指定できる。

params = {
  file: Faraday::UploadIO.new("file.txt", "text/plain")
}

ただ、送信したいデータを元々変数で持っている場合、この方法だとわざわざ一度ファイルに保存して送信しなければならない。テキストやRuby上で生成したCSV、ネットワーク経由で画像などはファイルでなく変数に持っているだけの場合も多いと思う。その場合はなんとなく面倒だし冗長。

この場合、UploadIOのソースを見てみたところIOであれば問題ないようなので下記のようにして文字列をそのまま送信することもできる。

params = {
  file: Faraday::UploadIO.new(StringIO.new(text_value), 'text/plain')
}

ソースはこのへん?  あとファイル名必要な時どうするのかは知らない。(と思ったらここのソースになんか書いてある)

https://github.com/socketry/multipart-post/blob/master/lib/composite_io.rb#L75


だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント