首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventMachine em-http-请求图像/png编码问题?

EventMachine em-http-请求图像/png编码问题?
EN

Stack Overflow用户
提问于 2012-02-10 02:37:38
回答 2查看 522关注 0票数 1

在通过em-http-请求下载图片时,我遇到了问题。

我希望能够将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 \000#en0#\234\355

当以二进制模式保存此字符串时,我可以打开Image。

所以在这个例子中,em-http-请求以某种方式处理数据,而net:http不这样做。

我的问题

使用ruby1.8的

  1. 在这里是否存在编码问题?在使用em-http-request时,是否需要在下载二进制数据时解码传输块编码?
  2. 是否需要在em-http-请求中启用特定的请求选项,以便从服务器捕获二进制数据/图像?
  3. 下载图像数据后,需要将em-http-请求图像数据转换为正确的格式以进行保存吗?

g 29

把我的头撞在墙上约12个小时,任何帮助都将不胜感激!

另外,我正在运行em-http-request,并为Jruby提供了最新版本的Eventmachine。

EN

回答 2

Stack Overflow用户

发布于 2012-10-22 07:01:06

结果表明,这是由于http_parser.rb中的一个bug (0.5.3java)造成的。具体地说:

代码语言:javascript
复制
ret = callback_object.callMethod(context, "on_body", callback_object.getRuntime().newString(new String(data)));

使用默认区域设置将字节数组转换为字符串会导致不可预测的行为。修复是在23a1fb5b5a0dc4506995a34ff149f450b8ceaf64中提交的,它使用了一个ByteList:

代码语言:javascript
复制
ret = callback_object.callMethod(context, "on_body", RubyString.newString(runtime, new ByteList(data, UTF8Encoding.INSTANCE, false)));

直到有一个新的版本,我想你将不得不建立从主人。

票数 1
EN

Stack Overflow用户

发布于 2012-04-09 14:41:17

我有图像文件下载通过事件机在1.9.3中工作。而且效果很好。在jruby 1.6.7中,它失败了

代码语言:javascript
复制
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

看起来像jruby的窃听器。

我正在使用以下宝石

代码语言:javascript
复制
em-http-request (1.0.2)
eventmachine (1.0.0.beta.4 java)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9221989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档