通过http向iPhone应用程序提供PNG图像

通过http向iPhone应用程序提供PNG图像,iphone,linux,http-headers,png,three20,Iphone,Linux,Http Headers,Png,Three20,我正在尝试将png图像从Linux(c++/Qt4.5.x)服务器守护进程提供给使用Three20框架的iPhone应用程序,特别是我想使用TTThumbsViewController视图 当我的守护进程“获取”请求时,我设法使任何web浏览器查看图像,并返回以下内容: QTextStream os(socket); os.setAutoDetectUnicode(true); QByteArray base64 = array.toBase64(); os << "HTTP/1.

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

当我的守护进程“获取”请求时,我设法使任何web浏览器查看图像,并返回以下内容:

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>";
在中,单击浏览器以查看图像

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

[MockPhoto alloc]
 initWithURL:@"http://software.local:8080/test.png"
 smallURL:@"http://software.local:8080/test.png"
 size:CGSizeMake(480, 320)] autorelease],
...
没有返回或显示任何内容

我的问题是,如果我把say test.png放在Linux PC上一个合适的目录中,并启动一个web服务器(apache),然后浏览到“我看到的图像如上所述,但该图像没有嵌入到http头中?我真的不知道应该用什么标题来获得这种行为。如果我在上面的iPhone代码中设置URL,以便它从apache服务器加载png,我会在TTThumbsViewController中看到它


任何帮助都会很好,或者是更好的方法——正如您所看到的,我只有基本的http经验

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

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


Sam

我曾经用PHP来做这件事。将这些标题翻译成您的QT echo字符串

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

不太确定base64是否有必要

谢谢你的回复。我可以看到有两种方法可以“返回”图像,但当我让我的服务器返回这个:os Hmmm时,这很奇怪。你有没有在回复中没有位置标题的情况下尝试过它?除此之外,我对qt/web的了解还不够,无法再提供帮助,抱歉!还是不行-什么我正在试图找出如何以及在何处添加图像原始数据或base64数据??它是在标题本身还是在正文原始数据中?我确实尝试过将图像数据放入“正文”中,但没有乐趣。不知道如何将图像放入标题中,如果可能的话?有任何web专家知道我哪里出错了吗?谢谢。谢谢你暗示要尝试的东西-我会报告回来有任何发现。嗨,皮特,你解决了这个问题吗?我也有同样的问题。我无法回避。我很久以前就用一个全新的解决方案解决了这个问题,并放弃了Three20框架的“包袱”。你能分享一下你所做的吗?我正在努力让它工作!嗯,恐怕不容易——我们最终拥有了自己的解决方案iOS代码(不是Three20),如果我记得的话,服务器端是由其他人(我想是Rails)重新编写的。除了使用Three20框架,我还能够从服务器的角度使用@scootklein的答案进行工作——我把自己和Three20框架搞得一团糟;那里有太多的包袱。
header('Last-Modified: ' . date('r'));
header('Accept-Ranges: bytes');
header('Content-Length: ' . $imageSize);
header('Content-Type: image/png');
print(file_get_contents($file));