Commande curl pour upload à partir d'une application ?
Bonjour à toutes et à tous,
Après la présentation, voici mon premier problème de débutant sur lequel je coince par manque de connaissance ! J'espère être dans la bonne rubrique ?
Je débugge une application (Photo Nav) pour que celle-ci envoie par FTP des images vers un serveur et qu'elle entre des informations dans une base de données. Je teste en local pour le moment.
La commande générer par l'application est la suivante et est un exemple :
/usr/bin/curl –u login:password –T /Users/moncompte/48.png ftp://192.168.1.5/ftp/63.png
Commande récupérée dans la console de Xcode. Curl renvoi l'erreur 26, soit ouverture ou lecture impossible du fichier 48.png. Mais si je reprends cette commande tel quelle dans le terminal d'OSX, cela fonctionne ! Le transfert se fait bien, parfait avec le terminal mais pas avec l'application. J'ai bien essayé de changer les droits d'accès au fichier à uploader mais rien n'y fait !
Ma question est la suivante : pourquoi cette commande ne fonctionne pas avec l'application et que cela fonctionne avec le terminal !? Quelque chose m'échappe !
Une idée ? une piste à suivre ?
Merci par avance pour votre aide et votre patience !
Bonne journée à vous.
François.
P. -S. : les fichiers sources avec de nombreux bugs sont là :
Réponses
Dans quel répertoire es-tu quand tu lances la commande dans le terminal ?
Essaie de te mettre dans le répertoire de ton exécutable; je ne suis pas sûr de moi, mais c'est peut-être une piste.
Tu peux copier/coller l'erreur exacte ?
Ton application n'aurait pas essayé d'ouvrir le fichier 48.png par ailleurs pendant que tu lances cette commande ?
Bon, je vais peut être répondre un peu à côté, mais pour faire ce que tu veux faire, je choisirai plutot des requêtes HTTP en mode POST et le framework AFNetworking te permet de faire ça assez facilement...
Tu la lances comment ta comment ta commande curl dans ton application ? Avec une NSTask ? Tu peux citer le code ?
RE. à tous,
Merci pour votre aide !
Alors si je me mets dans le répertoire de l'exécutable avec le Terminal : ça fonctionne !
Effectivement, l'application ouvre le fichier ou les fichiers afin de sélectionner celui à importer sur le serveur et de transmettre les infos à la base de données. Voici l'erreur qui sort sur la console de X-Code :
La commande curl se lance avec la classe Apple TaskWrapper. Ci-après le code de cette section du lancement de la commande.
Les requêtes en HTTP : je ne sais pas !? (sourire)
Quel patience vous avez : merci infiniment !
Bien cordialement
François.
NSArray *curlcmd doit contenir un objet par paramètre.
/usr/bin/curl -u webobjects_man:webobjects_man -T /Upload/Photo.png ftp://192.168.1.5/ftp/66.png
donne
NSArray *curlcmd = [NSArray arrayWithObjects:@-u, @webobjects_man:webobjects_man, @-T, @/Upload/Photo.png, @"ftp://192.168.1.5/ftp/66.png "];
1) que c'est bizarre ton message d'erreur qui s'affiche avec un caractère par ligne (et très chiant à lire ^^)
2) que l'erreur semble dire "Can't open '/Upload/Photo.png'" (et non "/Users/tonnom/40.png" comme tu le mettais dans ton message d'origine). As-tu vraiment un dossier "Upload" à la racine même de ton disque dur ?
RE.
Je vais voir de se côté là ...
Oui, c'est un peu le bazar à lire ce message d'erreur dans la console ! Je vais essayez d'arranger çà ! (sourire)
Oui, pour test et seulement pour test, j'ai un dossier Upload à la racine. Et, le fichier test à uploader est Photo.png puis renommer en "numéro".png par l'application. Dans cette configuration comme dans l'autre cela fonctionne avec le terminal.
Bien cordialement
François.
Bonjour,
Pourquoi ne pas utilise les classes Apple faite pour ça, pour toute communication http/https/ftp/file ( url loading system). Ou bien y a un truc que je ne comprends pas.
Sous OS X, on peut tout à fait utiliser les outils en ligne de commande. Utiliser curl est probablement plus simple dans un premier temps, que de tout coder avec NSURLConnection et compagnie.