2013-07-07 1 views
4

Я пытаюсь записать звук на iPhone с помощью PhoneGap, а затем отправить этот звук на сервер. Я использую API-интерфейсы PhoneGaps Media для записи, а затем API передачи файлов PhoneGap для отправки файла на сервер.Загрузка PhoneGap .wav с устройства iOS создает 0k-файл на сервере

Я могу сделать запись просто прекрасной, и ее воспроизведение отлично работает. Однако, когда я пытаюсь отправить его на сервер, запись появляется на сервере, но он говорит, что файл имеет размер 0k.

Я провел довольно обширный поиск по этой проблеме и нашел других, у которых была эта проблема. Например: 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); 

    } 

Вот код на стороне сервера:

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

Я думаю, что это может быть проблема с тем, что я представляемого .wav файлы. Когда я отправляю файл, r.bytesSent обычно показывает от 200 до 400 байт (независимо от размера файла), поэтому кажется, что фактическое содержимое файла просто не отправляется.

Я протестировал вышеуказанный код с помощью простого текстового файла, и он прошел отлично, поэтому я не думаю, что это разрешение или синтаксическая проблема. Я не пробовал это с файлами изображений, но я не могу себе представить, что это сильно влияет на то, что я отправляю.

Кто-нибудь сделал это успешно?

+0

Я попытался переименовать файл somefile.wav в Somefile.txt или просто некий-файл. Он не работает, файл по-прежнему равен 0 на сервере. Я тестировал с txt, jpg, и он работает. –

ответ

1

Мне удалось решить это несколько дней назад. Речь идет о переменной myPath в примере вопроса. myPath не может быть чем-либо иным, кроме папки tmp (создается временная папка для телефона/устройство) Итак, когда вы пытаетесь отправить файл, вы точно знаете, что копия этого файла была сделана в папке tmp. Так что это как раз перед ft.upload:

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

В моем случае myFolderPath был "Документы \ СМИ. Путь к документам содержит файлы, созданные пользователем на вашем устройстве.

Я надеюсь, что это спасает людей от всех посещенных Google поисковые страницы :)
(Это работает для PhoneGap 3.0.0)

 Смежные вопросы

  • Нет связанных вопросов^_^