2017-05-05 6 views
0

J'utilise la bibliothèque native ruby ​​pour faire un appel API POST multipart/form-data. Dans cet appel, j'envoie json et les fichiers, mais du côté serveur, le fichier n'est pas téléchargé correctement. Parfois, il est téléchargé avec succès.Téléchargement d'un fichier PDF vers une source externe via Net :: Http dans ruby ​​

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

comment faire API POST appel avec JSON et fichiers comme multipart/form-data – santoshkumar

Répondre

0

Je pense que vous devriez utiliser BASE64 pour le téléchargement de fichiers. Le cas d'utilisation principal du codage base64 est lorsque vous voulez stocker ou transférer des données avec un ensemble restreint de caractères; c'est-à-dire lorsque vous ne pouvez pas passer une valeur arbitraire dans chaque octet. Base64 permet de coder des données de 8 bits en 6 bits pour la transmission sur ces types de format

Décode une chaîne codée en base 64 en sa représentation d'origine.

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

J'envoie la demande à l'API tiers – santoshkumar

+0

Pour cela, vous devez mentionner votre code dans cette question – Sunny