【问题标题】:Serving PNG images over http to Three20 iPhone app通过 http 向 Three20 iPhone 应用程序提供 PNG 图像
【发布时间】:2010-02-18 13:28:52
【问题描述】:

我正在尝试将来自 Linux (c++ / Qt4.5.x) 服务器守护程序的 png 图像提供给使用 Three20 框架的 iPhone 应用程序 - 特别是我想使用 TTThumbsViewController 视图。

当“GET”请求时,我设法让任何网络浏览器查看图像,并在我的守护程序中返回以下内容:

QTextStream os(socket);
os.setAutoDetectUnicode(true);
QByteArray base64 = array.toBase64();

os << "HTTP/1.1 200 Ok\r\n"
  "Host: software.local\r\n"
  "\r\n"
  "<html>"
  "<body>"
  "<img src=\"data:image/png;base64," << base64 << "\" />"
  "</body>";

其中“array”是 png 的图像数据;我正在输入类似的内容:

  http://software.local:8080/test.png

进入浏览器查看图片。

当我尝试在我的照片源类中指定相同的 URL 时

[MockPhoto alloc]
 initWithURL:@"http://software.local:8080/test.png"
 smallURL:@"http://software.local:8080/test.png"
 size:CGSizeMake(480, 320)] autorelease],
...

什么都没有返回或显示?

我的问题是真的 - 如果我将 test.png 放在 Linux PC 上的合适目录中并启动 Web 服务器(apache),然后浏览到“http://software.local/test.png 我看到上面的图像,但图像是没有嵌入到 http 标头中?我真的无法弄清楚标头应该是什么才能获得这种行为。如果我在上面的 iPhone 代码中设置 URL,以便它从 apache 服务器加载 png,我会在 TTThumbsViewController 中看到它。

任何帮助都会很好,或者是更好的方法 - 正如你所见,我只有基本的 http 经验。

【问题讨论】:

  • 嗨彼得特,你解决了这个问题吗?我有同样的问题。无法绕过。
  • 我很久以前就通过一个全新的解决方案解决了这个问题,并放弃了 Three20 框架的“包袱”。
  • 你能分享一下你做了什么吗?我正在努力让这个工作!
  • 嗯,恐怕不容易——如果我记得的话,我们最终得到了自己的 iOS 代码(不是 Three20),而且服务器端是由其他人重写的(我认为是 Rails)。除了使用 Three20 框架之外,从服务器的角度来看,我还可以使用 @scootklein 的回答来做一些事情——我把 Three20 框架弄得一团糟;恕我直言,那里的行李太多了。

标签: iphone linux http-headers png three20


【解决方案1】:

您的脚本不是在提供图像,而是在提供将由浏览器解释的 html。我从未使用过three20 的框架,但我敢打赌他们希望将png 作为数据返回,而不是嵌入到html 文档中。由于您正在测试的浏览器理解 html 以及原始图像数据,因此它会很好地显示图像。

要使其正常工作,您需要将内容类型标头设置为“image/png”,然后发送图像数据。不过,我不知道如何在 QT 中执行此操作,抱歉:(

山姆

【讨论】:

  • 感谢您的回复。我可以看到有两种“返回”图像的方法,但是当我让我的服务器返回这个时: os software.local:8080/test.png\r\n" "Content -Type: image/png\r\n" "Content-Length: "
  • 嗯,这很奇怪。您是否尝试过在响应中没有 Location 标头?除此之外,我对qt / web的了解还不够,无法再提供帮助,对不起!
  • 仍然不行 - 我想弄清楚如何以及在何处添加图像原始数据或 base64 数据?它是在标题本身还是在正文中?我确实尝试将图像数据放在“身体”中,但没有任何乐趣。如果可能的话,不知道如何将图像放在标题中?有没有网络大师知道我哪里出错了?谢谢。
【解决方案2】:

我以前用 PHP 来做这件事。将这些标头转换为您的 QT 回显字符串。

header('Last-Modified: ' . date('r'));
header('Accept-Ranges: bytes');
header('Content-Length: ' . $imageSize);
header('Content-Type: image/png');
print(file_get_contents($file));

不太确定base64是否有必要

【讨论】:

  • 感谢您提出尝试的建议 - 我会报告任何发现。
猜你喜欢
  • 2014-03-30
  • 2011-10-30
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2012-09-04
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多