2016-04-13 23 views
0

Paperclipでアップロードした画像をAPIに送信しようとしています。Net :: HTTPを使用してPNG画像を送信する方法

どのようにエンコードしますか?

今私はattachment.queued_for_write[:original].readを使用して、そのPNGの実際のファイル内容を取得し、要求の本文にその内容を送信しようとしています。しかし、サーバーはそれを持っていません。

郵便配達員経由でリクエストを送信すると、正常に動作します。郵便配達はどのようにこれをコード化するのですか?残念なことに、PostmanからRubyコードを生成しようとするとうまくいかず、要求の本文に[Object object]というファイルが表示されます。

+0

はあなたのファイルを期待しています。 APIのドキュメントを参照してください。 [最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve) – Uzbekjon

+0

Wiresharkを起動します。 PostmanのPOST要求とNet :: HTTPのPOST要求を比較します。 [この回答](http://stackoverflow.com/a/30827339/5006469)が役立ちます。 – rdupz

+0

@Uzbekjon私の質問は、郵便配達はどのようにこれをエンコードするのですか?これは、作成者が質問に対する答えを知らないリンク先のdink APIです。しかし、それは郵便配達で働くので、私の質問です。 – bevanb

答えて

1

Postman docs say標準ポストを使用しています。 quick searchは、このコードの結果:サードパーティのAPIに依存

require "net/http" 
require "uri" 

# Token used to terminate the file in the post body. Make sure it is not 
# present in the file you're uploading. 
# You might want to use `SecureRandom` class to generate this random strings 
BOUNDARY = "AaB03x" 

uri = URI.parse("http://something.com/uploads") 
file = "/path/to/your/testfile.txt" 

post_body = [] 
post_body < < "--#{BOUNDARY}\r\n" 
post_body < < "Content-Disposition: form-data; name='datafile'; filename='#{File.basename(file)}'\r\n" 
post_body < < "Content-Type: text/plain\r\n" 
post_body < < "\r\n" 
post_body < < File.read(file) 
post_body < < "\r\n--#{BOUNDARY}--\r\n" 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Post.new(uri.request_uri) 
request.body = post_body.join 
request["Content-Type"] = "multipart/form-data, boundary=#{BOUNDARY}" 

http.request(request) 
+0

もっと精巧な解決策はここにあります:https://coderwall.com/p/c-mu-a/http-posts-in-ruby – bevanb

関連する問題