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

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

新規登録して質問してみよう
ただいま回答率
85.37%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Q&A

1回答

6531閲覧

wgetでのファイルアップロードについて

s.i.u.n.i.a11

総合スコア15

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2015/11/08 03:15

sinatraのサーバーにwgetにてファイルのアップロードを行いたいのですが、
以下ERROR EOFErrorが発生してします。

ブラウザからのアップロードは正常に動きますのでwgetのシェルスクリプト側に問題があるかとは思うのですが行き詰っています。。
ご教示いただければと思います。よろしくお願いします。

以下がエラー内容と実際のwget実行シェルスクリプトです。

■エラー内容

[2015-11-08 11:50:08] ERROR EOFError: bad content body /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart/parser.rb:97:in `block in fast_forward_to_first_boundary' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart/parser.rb:95:in `loop' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart/parser.rb:95:in `fast_forward_to_first_boundary' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart/parser.rb:53:in `parse' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart.rb:25:in `parse_multipart' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/request.rb:375:in `parse_multipart' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/request.rb:207:in `POST' (erb):222:in `pretty' /Users/user/.rbenv/versions/2.2.3/lib/ruby/2.2.0/erb.rb:863:in `eval' /Users/user/.rbenv/versions/2.2.3/lib/ruby/2.2.0/erb.rb:863:in `result' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/showexceptions.rb:97:in `pretty' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:30:in `rescue in call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:21:in `call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:in `call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:2021:in `call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `block in call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1795:in `synchronize' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `call' /Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service' /Users/user/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service' /Users/user/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run' /Users/user/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread' localhost - - [08/Nov/2015:11:50:08 JST] "POST /upload HTTP/1.1" 500 296 - -> /upload

■シェルスクリプト

sh

1# バウンダリ文字列は世界標準時基準時点からの秒数とする 2boundary="boundary-`date '+%s'`" 3# 受信する cgi の <input type="file" name="..."> で指定されるフォーム名 4formname="file" 5# 送信するファイル 6filename="post.txt" 7# 送信するファイルのデータ 8contents="`cat ${filename}`" 9 10# multipart/form-data 形式のデータ生成 11data=" 12--${boundary} 13Content-Disposition: form-data; name=\"file\"; filename=\"post.txt\" 14Content-Type: text/plain 15 16${contents} 17--${boundary}-- 18" 19 20# ファイルの送信処理 21wget --header="Content-Type: multipart/form-data; boundary=${boundary}" \ 22 --post-data="$data" http://localhost:4567/upload

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

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

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

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

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

guest

回答1

0

[2015-11-08 11:50:08] ERROR EOFError: bad content body
/Users/user/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/multipart/parser.rb:97:in `block in fast_forward_to_first_boundary'
エラーメッセージの通りにparser.rbの97行目を見るとデータ部を取り込めていないようです。

ヘッダなど特におかしなところはないように見えますので、エラー原因はちょっとした部分なんだと思います。

以下のように-xオプションで実行するとスクリプトの内容が出力されますので変な部分があれば分かると思います。

$ sh -x scriptname.sh

これで分からないようでしたらwget(1) でファイル送信のように一旦ファイルに書き出して--post-fileオプションで送信してみてはいかがでしょうか?この記事では最後のboundaryの行末に--を付け忘れているのでご注意ください。

投稿2015/11/08 04:02

shiena

総合スコア1827

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

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

s.i.u.n.i.a11

2015/11/08 04:40

ご回答ありがとうございます! 教えていただいたオプションで実行し、おかしい部分がないか確認しましたがわかりませんでした。。 一旦ファイルに書き出して、というのも行ってみましたがやはり同じエラーとなってしまいました。 引き続きいろいろ試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問