2

次のようにRestClientを使用してデータをマルチパートとしてアップロードしようとしています。

response = RestClient.post(url, io, {
        :cookies => {
          'JSESSIONID' => @sessionid
        }, 
        :multipart => true, 
        :content_type => 'multipart/form-data'
      })

引数は私のioファイルを含むStringIOであるため、ディスクからではなくメモリからです。

サーバー(Tomcatサーブレット)はマルチパートデータを読み取ることができず、エラーが発生します。

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

それで、RestClientはそれをマルチパート形式で送信していないと思いますか?誰かが問題を見ますか?問題はRuby(クライアント)側にあると想定していますが、サーバー側の問題である可能性があると思われる場合は、サーブレット(Spring)コードを投稿できます。

また、実際のファイルがないため、RestClientがアップロードされたファイル名に何を使用するのだろうか...ファイル名なしでマルチパートリクエストを行うことはできますか?

4

2 に答える 2

7

これを行うことができます。サブクラスStringIO化して非 nil パス メソッドを追加するだけです。

class MailIO < StringIO
  def path
    'message'
  end
end

これを確認したところ、Mailgun API はこれでかなりダウンしています。

于 2012-02-22T22:25:27.333 に答える
1

rest-clientライブラリ(Archiloque)の作者に相談したところ、これが可能な場合、簡単に扱えるようにAPIが設定されていないようです。:multipart => true パラメーターを使用すると、IO がファイルのように扱われ、IO で nil 以外の #path が検索されます。StringIO の場合、これは常に nil です。

将来これが必要な人がいる場合は、ライブラリのメーリング リスト (code@archiloque.net) に相談する必要があります。作成者は可能だと考えているようですが、おそらく単純ではありません。

マルチパート形式でない限り、IO からストリーミング アップロードを簡単に行うことができます。

于 2011-11-08T07:10:23.033 に答える