通过em-http-request下载图片时遇到问题..
我希望能够将http正文数据保存到磁盘然后能够 当前保存检索到的http正文数据时,正常打开图像 通过二进制写操作到磁盘我得到一个损坏的图像。
当我向目标图像发出get请求时,我得到以下内容 在身体中截断了字符串。
\ 357 \ 277 \ 275PNG \ r \ n \ 032 \ n \ 000 \ 000 \ 000 \ rIHDR \ 000 \ 000 \ 001H \ 000 \ 000 \ 000` \ B \ 002
当使用net:http获取图像时,我得到以下截断的字符串
\ 211PNG \ r \ n \ 032 \ n \ 000 \ 000 \ 000 \ rIHDR \ 000 \ 000 \ 001H \ 000 \ 000 \ 000` \ B \ 002 \ 000 \ 000 \ 000 \ 277 \ 243 \ 177 [\ 000 \ 000 \ 000IDATx \ 234 \ 355]
以二进制模式保存此字符串时,我可以打开图像。
所以在这个例子中,em-http-request以某种方式处理数据:http:http 不
我的问题,
我正在使用ruby 1.8这里有编码问题我不知道吗?
使用em-http-request时,是否必须解码传输分块编码 下载二进制数据时?
我是否需要在em-http-request中启用特定的请求选项 从服务器窃取二进制数据/图像?
下载图像数据后,我需要将em-http请求图像数据转换为正确的格式进行保存?
在这个问题上,我的头靠在墙上大约12个小时,任何帮助 非常感谢!!!
此外,我正在为Jruby运行最新版本的Eventmachine运行em-http-request。
答案 0 :(得分:1)
事实证明这是由于http_parser.rb(0.5.3 java)中的错误造成的。具体做法是:
ret = callback_object.callMethod(context, "on_body", callback_object.getRuntime().newString(new String(data)));
使用默认语言环境将字节数组转换为字符串会导致不可预测的行为。修复程序在使用ByteList的23a1fb5b5a0dc4506995a34ff149f450b8ceaf64
中提交:
ret = callback_object.callMethod(context, "on_body", RubyString.newString(runtime, new ByteList(data, UTF8Encoding.INSTANCE, false)));
在有新版本之前,我想你必须从大师那里构建。
答案 1 :(得分:0)
我通过在1.9.3中工作的eventmachine下载图像文件。它工作正常。在jruby 1.6.7中失败
require 'rubygems'
require 'eventmachine'
require 'uuid'
require 'em-http-request'
EM.run do
http = EventMachine::HttpRequest.new("http://.../image.png").get
file = File.new("test_image.png", "wb")
http.stream {|chunk|
file.write chunk
}
http.errback {
puts "error downloading image"
file.close
File.rm(file.path)
EM.stop
}
http.callback {
puts "success"
file.close
EM.stop
}
end
看起来像一个犹豫不决的虫子。
我正在使用以下宝石
em-http-request (1.0.2)
eventmachine (1.0.0.beta.4 java)