2009-11-23 10 views
0

J'essaye de servir des images PNG d'un démon serveur Linux (C++/Qt4.5.x) à une application iPhone qui utilise le framework Three20 - en particulier je veux utilisez la vue TTThumbsViewController.Servir des images PNG sur http à l'application iPhone Three20

j'ai réussi à faire des images de vue du navigateur Web avec ce qui suit retourné dans mon démon quand il « GET » s une requête:

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

où « tableau » est de données d'image d'un .png; Je suis en train de taper quelque chose comme:

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

dans le navigateur pour voir l'image.

Lorsque je tente de spécifier la même URL dans ma photo de classe source avec quelque chose comme

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

rien est retourné ou affiché? Ma question est vraiment - si je mets dire test.png dans un répertoire approprié sur le PC Linux et démarrer un serveur web (apache), puis naviguez jusqu'à "http://software.local/test.png Je vois l'image comme ci-dessus, mais l'image n'a pas été Si je place l'URL dans le code de l'iPhone ci-dessus afin de charger le png depuis le serveur apache, je le vois dans le TTThumbsViewController

Toute aide serait grande, ou de meilleure façon de le faire - je n'avoir une expérience de base http, comme vous pouvez le voir

+0

Salut Petert, avez-vous résolu cela? J'ai le même problème.Pas capable de se déplacer – applefreak

+0

J'ai résolu le problème il y a longtemps en travaillant à partir d'une solution complètement nouvelle, et a donné sur le «bagage» du cadre de Three20 – petert

+0

Pouvez-vous partager s'il vous plaît ce que vous avez fait? J'ai du mal à faire fonctionner ça! – applefreak

Répondre

2

Votre script n'est pas au service d'une image, il est au service de html qui sera interprété par un navigateur. . JE' Je n'ai jamais utilisé le framework de Three20, mais je parie qu'ils attendent un png comme données, nt intégré dans un document html. Comme le navigateur que vous testez comprend le code html ainsi que les données d'image brutes, l'image s'affichera correctement. Pour que cela fonctionne, vous devez définir l'en-tête de type de contenu sur 'image/png', puis envoyer les données d'image. Je ne sais pas comment faire cela dans l'intervalle QT mais, désolé :(

Sam

+0

Merci pour la réponse. Je peux voir qu'il y a 2 façons de 'renvoyer' une image, mais quand j'ai fait revenir mon serveur: os << "HTTP/1.1 200 Ok \ r \ n" "Emplacement: http: //software.local : 8080/test.png \ r \ n " " Type de contenu: image/png \ r \ n " " Content-Length: "<< base64.size() << "\ r \ n" "Codage de transfert de contenu: base64 \ r \ n" "\ r \ n" << base64; Je peux une erreur disant ne peut pas charger l'image. J'ai échoué à trouver des informations sur le Web concernant la façon de retourner l'image brute. – petert

+0

Hmmm, c'est bizarre. L'avez-vous essayé sans l'en-tête Location dans votre réponse? En dehors de cela, je ne sais pas assez sur qt/web pour aider plus, désolé! – deanWombourne

+0

Toujours pas aller - ce que j'essaie de comprendre est comment et où ajouter l'image brute ou base64 de données? Est-ce dans l'en-tête lui-même ou dans le corps brut? J'ai essayé de mettre les données d'image dans le 'corps', mais pas de joie. Aucune idée de comment mettre l'image dans l'en-tête, si possible? Est-ce que n'importe quel gourou du Web sait où je vais mal? Merci. – petert

0

je faire avec PHP. Traduire ces en-têtes dans votre chaîne echo QT.

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

Non trop sûr de base64 si c'est nécessaire ou pas

+0

Merci d'avoir fait allusion à quelque chose à essayer - je rapporterai les résultats. – petert