2010-10-21 21 views
4

je tente d'envoyer une photo et l'emplacement GPS au serveur via PHPSDK iPhone: Téléchargez l'image de l'iPhone à un serveur php envoyer fichier vide (échantillon lien code à l'intérieur)

est ici la partie PHP: Copy from here économie le fichier téléchargé

Les exemples ci-dessus créent une copie temporaire des fichiers téléchargés dans le dossier temporaire PHP sur le serveur.

Les fichiers copiés temporaires disparaissent à la fin du script. Pour enregistrer le fichier téléchargé nous avons besoin de le copier dans un autre emplacement:

<?php 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 20000)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
?> 

Le script ci-dessus vérifie si le fichier existe déjà, si elle ne le fait pas, il copie le fichier dans le dossier spécifié.

Note: Cet exemple enregistre le fichier dans un nouveau dossier appelé « upload »

maintenant à une partie iOS, je ne peux pas envoyer de localisation GPS au serveur, il est facile parce que juste une chaîne.

et vous pouvez download sample code here

Mais une image n'est pas, je fais quelques recherches et trouvé ce discussion

je mets directement le code dans mon envoi GPS & bouton image

la meilleure chose est il peut commentaires que j'envoie le succès du fichier ou a échoué

c'est le plus de message que j'ai reçu après avoir envoyé la photo au serveur

1.Invalid fichier

code 2.Return:
Ajouter:
Type:
Taille: 0 Kb
fichier Temp:
Stocké dans: upload/

Je suis un peu guide enregistrer l'image à NSData

NSData *photoData= UIImageJPEGRepresentation(self.theimageView.image, 1.0); 

et je vérifie aussi il y a des données à l'intérieur ou non

si simplement ajouter ce code dans l'action Bouton

if (photoData == nil) { 
    NSLog(@"The photo is nothing !!!"); 
} 
else { 
    NSLog(@"Photo inside !!!!"); 

Il fonctionne très bien .......

Mais Comment télécharger une image serveur ???

peut-être que je dois donner un nom de fichier puis le télécharger ???

mais comment ...

J'utilise jamais la fonction appareil photo et de télécharger des données avant

quelqu'un L'espoir peut comprendre ce problème

nombreux Merci !!!

+0

J'ai eu une erreur similaire lors de l'utilisation d'un formulaire HTML au lieu d'un iPhone. Avez-vous testé de manière significative le script de téléchargement afin de vous assurer qu'il n'y a pas d'erreur ici? –

+0

désolé je ne connais pas la partie PHP ou HTML, c'est mon autre ami écrit ........ désolé ce pas d'aide à votre question, mais je pense que je viens d'envoyer un fichier vide au serveur PHP.Mais après je prendre une photo Je reçois un message "ERREUR: FigCreateCGImageFromJPEG retourné -12905 .Entrée (nulle) était 630283 octets." –

+0

alors ... Il devrait y avoir quelque chose dans mon NSData –

Répondre

2

utiliser HTTP multipart POST ou ASIHTTPRequest


@WebberLai 

Save the image to home directory: 
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"]; 
    UIImage *img = pickerImage; 


// Write a UIImage to JPEG with minimum compression (best quality) 
    [UIImageJPEGRepresentation(img, 0.5) writeToFile:jpgPath atomically:YES]; 

    NSString *photoPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"]; 

    request = [ASIFormDataRequest requestWithURL:webServiceUrl]; 
    [request setPostValue:requestString forKey:@"data"]; 
    [request setFile:photoPath forKey:@"apiupload"]; 
    [request startSynchronous]; 
+0

Comment puis-je savoir où je sauvegarde les données et quel est le nom de fichier ou le chemin ... Je sais rien idée sur les informations de données, mais merci quand même –

+0

Je pense que je dois inclure la sous-classe ASIFormDataRequest incluse ??? –

+0

http://allseeing-i.com/ASIHTTPRequest/Comment utiliser –

1

Il est bien d'ajouter cette

NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"]; UIImage *img = pickerImage; 

[UIImageJPEGRepresentation(img, 0.5) writeToFile:jpgPath atomically:YES]; 

Mais quand j'essaie de mettre dans mon action bouton

NSString *photoPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.jpg"]; 

request = [ASIFormDataRequest requestWithURL:webServiceUrl]; 
[request setPostValue:requestString forKey:@"data"]; 
[request setFile:photoPath forKey:@"apiupload"]; 
[request startSynchronous]; 

Il a eu beaucoup d'erreurs mes sage, je pense est le problème des délégués

premier complier dit "demande non déclaré" et "ASIFormDataRequest non déclarés"

et "requestString non déclaré"

je tente de donner demande et requestString déclaré donc

I utiliser ASIFormDataRequest *request; et NSString *requestString;

clairement une erreur de "equestString non déclarés"

Je ne sais pas comment déclaré ASIFormDataRequest donc encore une erreur ...

Ai-je raison de mettre cela dans IBAction ???

Je regarde quelques exemples here

Merci encore ~ ​​vous êtes un gars vraiment sympa!

Plus Edit:

OK, voici pas de plus sur l'importation nécessaire .h .m et cadre

download here

et importer cet en-tête:

ASIHTTPRequestConfig.h 

ASIHTTPRequestDelegate.h 

ASIProgressDelegate.h 

ASICacheDelegate.h 

ASIInputStream.h 

ASIInputStream.m 

ASIHTTPRequest.h 

ASIHTTPRequest.m 

ASIFormDataRequest.h 

ASIFormDataRequest.m 

ASINetworkQueue.h 

ASINetworkQueue.m 

ASIDownloadCache.h 

ASIDownloadCache.m 

iPhone les projets doivent également inclure:

ASIAuthenticationDialog.h 

ASIAuthenticationDialog.m 

Reachability.h (in the External/Reachability folder) 

Reachability.m (in the External/Reachability folder) 

que cadre d'importation:

CFNetwork

SystemConfiguration.cadre

MobileCoreServices.framework

CoreGraphics.framework

libz.1.2.3.dylib

0

OK, voici un petit bug b ntre iPhone3 & iPhone4/touch4

@ Réponse de dhil est presque droit, il vous suffit de donner une clé droite (dépend serveur)

[request setPostValue:requestString forKey:@"data"]; 
[request setFile:photoPath forKey:@"apiupload"]; 

Ok ... maintenant si vous utilisez iPhone3, et vous n « t donnent requestStringalloc

Il fonctionne très bien ~

Mais si vous exécutez sur iPhone4/touch4, fera EXC_BAD_ACCESS

même appareil est à la fois iOS 4.1

Alors ... Espérons que cette réponse vous aidera à gagner du temps sur l'image du téléchargement vers le serveur.