2

S3に画像ファイルを保存しています。そのファイルをフォームデータとしてリモートサイトにアップロードしたいと思います。

コントローラライン:

response = RestClient.post("#{BASE_URL}/processImage?language=#{LANGUAGE}&exportFormat=txt", :upload => { :file => File.new(asset.avatar.url) }) 

Asset.avatar.urlは、S3にあるペーパークリップに保存されたファイルです。それはそこにあります。公的にアクセス可能です。

しかし、私はErrno :: ENOENT(そのようなファイルやディレクトリはありません)をURLで取得し続けます...それは機能します!

私はおそらくここで簡単なものが欠けています。誰かアイデアはありますか?

**編集:解決済み**

open-uriを使用してから、open()を使用しました。それでもサーバーにダウンロードされますが、少なくとも機能します。そして視覚的にはよりシンプルに見えます。=)

修正方法は次のとおりです。

require 'open-uri'
response = RestClient.post("#{BASE_URL}/processImage?language=#{LANGUAGE}&exportFormat=txt", :upload => { :file => open(asset.avatar.url) })  

Open-uriはrubyの一部であるため、gem(つまり、rest-client)をインストールする必要はありません。コードに必要なだけです。

どこかに.readが必要だと思いましたが、それがなくても問題なく動作するようです。

4

1 に答える 1

1

RestClientで投稿する前に、ファイル/コンテンツをダウンロードする必要があります。File.newは、URLではなくファイルパスを引数として取ります。

于 2013-01-18T20:58:07.893 に答える