我必须使用Rest-Client在Ruby中实现下面列出的curl POST请求,以便可以将文件上传到服务器。
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: Basic jhdsjhdshjhdshdhh' --header 'tenant-code:djdjhhsdsjhjsd=' {"type":"formData"} 'https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098'
我尝试了以下-
require 'rest-client'
require 'json'
payload = {
:multipart => true,
:file => File.new(path_to_file, 'rb')
}
response = RestClient.post("https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098", payload, {accept: :json, 'tenant-code':"djdjhhsdsjhjsd=", 'Authorization': "Basic jhdsjhdshjhdshdhh"})
这很好,因为我从服务器收到200条响应。但是,当我在服务器上检查上传的文件时,文件已损坏。
这是使用ruby进行多部分/表单数据请求的正确方法吗?
我看到cURL请求中存在以下内容,但在任何地方的ruby请求中都没有考虑到以下内容。
{"type":"formData"}
我需要为此做些额外的事情吗?
答案 0 :(得分:0)
我通过将请求更改为以下内容来解决了我的具体情况(需要将IPA文件上传到企业应用商店):-
require 'rest-client'
require 'json'
response = RestClient::Request.execute(
:url => "https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098",
:method => :post,
:headers => {
'Authorization' => "Basic jhdsjhdshjhdshdhh",
'tenant-code' => "djdjhhsdsjhjsd=",
'Accept' => 'application/json',
'Content-Type' => 'application/octet-stream',
'Expect' => '100-continue'
},
:payload => File.open(path_to_file, "rb")
)
基本上,内容类型必须是八位字节流,并且还需要设置Expect标头。
希望它能帮助来此寻找东西的人。