2015-07-02 43 views
0

我正在嘗試上傳圖片。這是捲曲的代碼,我從網站上的文檔已收到Ruby:如何發佈文件?

curl -X POST 
    'https://my.craftar.net/api/v0/image/?api_key=123456789abcdefghijk123456789abcdefghijk' 
    -F "item=/api/v0/item/4fe672886ec142f6ab6d72d54acf046f/" 
    -F "[email protected]" 

我試圖用「網絡/ HTTP/POST /多」

File.open("./test.png") do |png| 
    data = {"item" => "/api/v0/item/2fb8cc16002742ccbbecddc186b1e131"} 
    uri = URI.parse('https://my.craftar.net/api/v0/image/?api_key=09d29c3801932aab983892565e731ee3e5c0879e') 
    headers = { 'Content-Type' =>'application/json'} 
    req = Net::HTTP::Post::Multipart.new uri.request_uri, 
    {"file" => UploadIO.new(png, "image/png", "image.png")}.merge(data), 
    headers 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true      
    res = http.request(req) 
    puts "result:" 
    puts res.body 
end 

來解決它,我依據的文件上這個代碼'net/http/post/multipart' 但它不起作用,我得到了很多錯誤。而我無法弄清楚我做錯了什麼。

現在我得到一個錯誤從CraftAR

{ 「消息」:「預期的multipart/form-data的;邊界= < ..>內容,但得到的應用程序/ JSON;邊界= ----- ------ RubyMultipartPost。「,」code「:」WRONG_CONTENT_TYPE「}}

回答

0

標題和參數的順序是錯誤的。諮詢the source here

固定呼叫應

File.open("./test.png") do |png| 
    req = Net::HTTP::Post::Multipart.new(uri.request_uri, 
    {"file" => UploadIO.new(png, "image/png", "image.png")}.merge(data)) 
    res = Net::HTTP.start(url.host, url.port) do |http| 
     http.request(req) 
    end 
end 
+0

感謝你,工作得更好。但是,我確實得到了一個錯誤,但這次是另外一個: _/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby​​/2.0.0/net/http/generic_request.rb:179 :'send_request_with_body':未定義的方法'bytesize'爲{「item」=>「/ api/v0/item/4fe672886ec142f6ab6d72d54acf046f」}:散列(NoMethodError)_ –

+0

是的,原代碼中有另一個錯誤,現在更新 – Slicedpan

+0

謝謝這有助於很多,改變了上面的代碼。 :) –