2013-07-07 3 views
4

Je tente d'enregistrer de l'audio sur un iPhone en utilisant PhoneGap, puis envoyer cet audio à un serveur. J'utilise les API médias de PhoneGaps pour effectuer l'enregistrement, puis l'API de transfert de fichiers PhoneGap pour envoyer le fichier au serveur.PhoneGap .wav télécharger à partir d'un appareil iOS crée un fichier 0k sur le serveur

Je suis capable de faire l'enregistrement très bien, et le lire fonctionne parfaitement. Quand j'essaye de l'envoyer au serveur, cependant, l'enregistrement apparaît sur le serveur mais il indique que le dossier est 0k grand.

J'ai fait des recherches assez approfondies sur ce problème et trouvé d'autres personnes qui ont eu ce problème. Par exemple: https://groups.google.com/forum/#!topic/phonegap/zjzSs6JVokE

function win(r) { 
     alert("Code = " + r.responseCode); 
     alert("Response = " + r.response); 
     alert("Sent = " + r.bytesSent); 
    } 

    function fail(error) { 
     alert("An error has occurred: Code = " + error.code); 
     console.log("upload error source " + error.source); 
     console.log("upload error target " + error.target); 
    } 

    function upLoad() { 
     var options = new FileUploadOptions(); 
     options.fileKey="file"; 
     options.fileName=myPath.substr(myPath.lastIndexOf('/')+1); 
     options.mimeType="audio/wav"; 

     var params = new Object(); 

     var headers={'headerParam':'headerValue'}; 

     options.headers = headers; 

     options.chunkedMode = false; 

     var ft = new FileTransfer(); 
     ft.upload(encodeURI(myPath), encodeURI("http://myserver.com/upload.php"), win, fail, options); 

    } 

Voici le code du côté serveur:

print_r($_FILES); 
$new_image_name = "testFile.wav"; 
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/wwwroot/recordings/".$new_image_name); 

Je pense que cela peut être un problème avec le fait que je vous envoie des fichiers .wav. Lorsque j'envoie le fichier, r.bytesSent affiche généralement environ 200 à 400 octets (quelle que soit la taille du fichier), il semble donc que le contenu du fichier ne soit pas envoyé.

J'ai testé le code ci-dessus avec un simple fichier texte et ça passe très bien, donc je ne pense pas que ce soit un problème de permissions ou de syntaxe. Je n'ai pas essayé cela avec des fichiers image, mais je ne peux pas imaginer que cela fasse une grande différence sur ce que j'envoie.

Quelqu'un at-il fait cela avec succès?

+0

J'ai essayé de renommer le fichier somefile.wav à Somefile.txt ou tout simplement somefile. Cela n'a pas fonctionné, le fichier est toujours de taille 0 sur le serveur. J'ai testé avec txt, jpg et ça marche. –

Répondre

1

J'ai réussi à résoudre ce problème il y a quelques jours. Il s'agit de la variable myPath dans l'exemple de la question. myPath ne peut pas être autre que le dossier tmp (le dossier temporaire phonegap/device crée) Ainsi, lorsque vous essayez d'envoyer un fichier, vous êtes certain qu'une copie de ce fichier a été faite dans le dossier tmp. donc faire cela juste avant la ft.upload:

myPath = myPath.replace(myFolderPath, 'tmp'); 

Dans mon cas myFolderPath était «Documents \ media. Le chemin Documents est l'endroit où les fichiers personnalisés sont conservés sur votre appareil.

J'espère que cela sauve les gens de toutes les pages visitées de recherche google :)
(Cela a fonctionné pour PhoneGap 3.0.0)

Questions connexes