2009-11-23 65 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