[code="ruby"]
def get_image_body_data data={}
request_body=[]
request_body<<%Q{Content-Type:multipart/form-data,boundary=---AaB03x}<<"\r\n"
splict_label="---AaB03x"
request_body<<splict_label.chomp<<"\r\n"
request_body<<"Content-Disposition: form-data; name=\"status\"\r\n\r\n"
request_body<<%Q{#{data.fetch(:status,"")}}.chomp<<"\r\n"
request_body<<splict_label.chomp<<"\r\n"
request_body<<%Q{content-disposition: form-data; name="photo"; filename="saddam.jpg"}.chomp<<"\r\n"
request_body<<%Q{Content-Type: image/jpeg}.chomp<<"\r\n\r\n"
request_body<< data.delete(:photo)<<"\r\n"
request_body<<splict_label.chomp<<"\r\n"
request_body<<"Content-Disposition: form-data;name=\"source\"\r\n\r\n"
request_body<<"#{FanfouModule::SOURCE}\r\n"
request_body<<("---AaB03x--".chomp)<<"\r\n"
request_body.to_s
end
[/code]
[code="ruby"]
def do_upload_image data
url="http://127.0.0.1:3000/"
url = URI.parse(url)
req = Net::HTTP::Post.new(url.path)
req.basic_auth @username,@password
req.set_content_type("multipart/form-data")
# req.body=data.to_s
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req,data.to_s) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
puts res.body
true
else
puts res.body
false
end
res
end
[/code]
[code="java"]
def packImage image_file_uri
a=[]
File.open(image_file_uri) {|file|
file.each_line{|ch|
a<<ch
}
}
b=[]
b<<(a.to_s)
b.pack('m')
end
[/code]
[code="ruby"]
def upload_image photo,status=""
photo 为文件路径名称. packImage的方式就是将文件用Base64编码,
photo=packImage(photo)
data = get_image_body_data({:photo=>photo,:status=>status,:source=>SOURCE})
do_upload_image data
end
[/code]
我每次执行 upload_image的时候,后台都无法获取 photo这个参数,我不知道是什么原因,
或许是自己对Http的协议不是太了解, 希望有人能给我一些指点