2009-11-23 63 views
0

我想从一个Linux(C++/Qt4.5.x)服务器守护进程的png图像服务到使用Three20框架的iPhone应用程序 - 具体而言,我想使用TTThumbsViewController视图。通过HTTP服务PNG图像到Three20 iPhone应用程序

我设法让任何Web浏览器查看图像,在我的守护下面返回时,“GET” S要求:

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>"; 

其中“阵列”是一个png的图像数据;我正在输入如下内容:

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

进入浏览器查看图像。

当我尝试和我的照片源类的东西,如

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

没有指定相同的URL返回或显示?

我的问题是真的 - 如果我把test.png放在Linux PC的适当目录中并启动Web服务器(apache),然后浏览到“http://software.local/test.png我看到上面的图像,但图像不是嵌入到http头文件中我真的不知道头文件应该是什么来获得这种行为如果我在上面的iPhone代码中设置URL,那么它会从apache服务器加载png,我在TTThumbsViewController中看到了它。

任何帮助会很大,或者更好的方式来做到这一点 - 我只有基本的HTTP经验,你可以看到

+0

Hi Petert,你有没有解决这个问题?我有同样的问题,不能解决问题 – applefreak 2012-02-15 19:48:24

+0

很久以前,我用一个全新的解决方案解决了这个问题,在Three20框架的'行李'上。 – petert 2012-02-16 09:04:23

+0

你能分享请你做什么?我正努力做到这一点! – applefreak 2012-02-16 11:29:48

回答

2

你的脚本不服务的图像,它提供HTML会被浏览器解释。 。 一世' ve从来没有使用过three20的框架,但我敢打赌,他们期待一个PNG作为数据返回,nt嵌入到html文档中。由于您正在测试的浏览器能够理解html以及原始图像数据,因此它将显示图像正常。

为了得到这个工作,你需要将content-type头设置为'image/png',然后发送图像数据。我不知道如何在QT做到这一点,虽然,对不起:(

山姆

+0

感谢您的回复。我可以看到有两种方法可以“返回”图像,但是当我将服务器返回时: os <<“HTTP/1.1 200 Ok \ r \ n” “位置:http://software.local :8080/test.png \ r \ n“ ”Content-Type:image/png \ r \ n“ ”Content-Length:“<< base64。size()<<“\ r \ n” “Content-transfer-encoding:base64 \ r \ n” “\ r \ n”<< base64; 我可以错误地说无法加载图像。我未能在网上找到关于如何返回原始图像的任何信息。 – petert 2009-11-24 09:49:36

+0

嗯,这很奇怪。你有没有在你的回应中没有位置标题尝试过?除此之外,我对qt/web的了解还不够,对不起! – deanWombourne 2009-11-24 12:19:45

+0

仍然没有去 - 我想弄清楚是如何以及在哪里添加图像原始或base64数据?它是在头部本身还是身体原始的?我曾尝试将图像数据放在“身体”中,但没有喜乐。如果可能,不知道如何将图像放入标题中?任何网络专家都知道我要去哪里?谢谢。 – petert 2009-11-25 12:38:49

0

我用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肯定太有把握

+0

感谢您暗示要尝试的东西 - 我会报告任何调查结果。 – petert 2010-02-18 08:54:26