2017-05-05 221 views
0

我正在使用ruby本機庫來執行multipart/form-data API POST調用。 在這個調用中,我發送了json和文件,但是從服務器端文件沒有正確上傳。有時候,它會成功上傳。通過Net :: Http在ruby上傳PDF文件到外部源

boundary = '----WebKitFormBoundary7MA4YWxkTrZu0gW' 
url = URI("http://localhost:3000/pdfs") 

http = Net::HTTP.new(url.host, url.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
request = Net::HTTP::Post.new(url) 

request["authorization"] = "Bearer ddghfgdjh54544fdgdfghj" 
request["accept"] = 'application/json' 
request["content-type"] = "multipart/form-data; boundary=#{boundary}" 
request["cache-control"] = 'no-cache' 



body = [] 
# JSON data 
body << "--#{boundary}\r\nContent-Disposition: form-data;" 
body << "name=\"profile\"\r\n\r\n" 
body << {user: {name:"xyz",email:"[email protected]"} }.to_json 
body << "\r\n" 

#File data 

    body << "--#{boundary}\r\n" 
    body << "Content-Disposition: form-data;" 
    body << "name=\"profile\"; filename=\"#{username}.pdf\"\r\nContent-Type: application/pdf\r\n" 
    body << "#{File.read('/home/pdfs/profile.pdf')}\r\n" 


request.body = body.join 
response = http.request(request) 
+0

怎麼做JSON API POST調用和文件作爲多/ form-data的 – santoshkumar

回答

0

我想你應該使用BASE64進行文件上傳。 base64編碼的主要用例是當您想要使用一組受限制的字符存儲或傳輸數據時;即當你無法在每個字節中傳遞任意值時。 Base64允許將8位數據編碼爲6位,以用於在這些類型的格式上傳輸

將基本64編碼的字符串解碼爲其原始表示。

ActiveSupport::Base64.decode64("T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw==") 
# => "Original unencoded string" 
+0

,我將請求發送到第三方API – santoshkumar

+0

爲此,您需要提及你的代碼在這個問題上 – Sunny