2015-04-14 7 views
2

Я столкнулся с некоторыми проблемами при использовании плагина cordova File Transfer. Вот мой код:Cordova FileTransfer Download - всегда возвращает ошибку 3

window.requestFileSystem(
    LocalFileSystem.PERSISTENT, 
    0, 
    function onFileSystemSuccess(fileSystem) { 
     fileSystem.root.getFile(
      "dummy.html", {create: true, exclusive: false}, 
      function gotFileEntry(fileEntry) { 
       var sPath = fileEntry.fullPath.replace("dummy.html", ""); 
       var fileTransfer = new FileTransfer(); 
       fileEntry.remove(); 

       fileTransfer.download('http://cordova.apache.org/images/cordova_bot.png', sPath + photo.original_name, 
        function (theFile) { 
         alert('success: ' + JSON.stringify(theFile)); 
         console.log("download complete: " + theFile.toURI()); 
         // showLink(theFile.toURI()); 
        }, 
        function (error) { 
         alert('error: ' + JSON.stringify(error)); 
         console.log("download error source " + error.source); 
         console.log("download error target " + error.target); 
         console.log("upload error code: " + error.code); 
        }, 
        true 
       ); 
      }) 
    }, 
    function (error) { 
     alert('error request: ' + JSON.stringify(error)); 
    } 
); 

ошибка обратного вызова fileTransfer.download в возвращается код ошибки 3, HTTP 401. Я уже обновил файл и плагины FileTransfer, моя Cordova версия 4.3.0. также проверил мой config.xml для

<access origin="*" /> 

но это там. Я попытался добавить заголовок Connection: close, но результата нет. Пробовал установить 4-й параметр загрузки по умолчанию (false) тоже - не повезло.

Тестирование на планшет Android.

Что-нибудь еще? Благодаря!

+0

У планшета есть подключение к интернету? ошибка 3 y проблема подключения – jcesarmobile

+0

Да, это так.Приложение возвращает ошибку с кодом 3 и http_status 401, body: null, exception: null – radzik

+0

URL-адрес на вашем примере? – jcesarmobile

ответ

4

Просто нашел «решение» моей проблемы. То, что я сделал, это понизить версию плагина передачи файлов с 0.5.0 до 0.4.8.

Если кто-то когда-либо сталкиваться с подобной проблемой, сделать, как показано ниже:

  1. Удалить существующий файл-передачи плагин, запустив «Cordova плагинов список», а затем «Cordova плагин удалить name_from_list»
  2. Перейти к https://github.com/apache/cordova-plugin-file-transfer/releases и загрузите файл zip версии 0.4.8.
  3. Распакуйте файл в корневом каталоге вашего приложения Cordova
  4. Run 'Cordova плагин добавить path_to_unzipped_folder'

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

+4

Вы также можете добавить указанную версию, используя cordova :) просто запустите 'cordova plugin add org.apache.cordova.file-transfer @ 0.4.8', чтобы добавить указанную версию. – keldar

+0

У меня была аналогичная проблема с установкой cordova-plugin-whitelist и ее настройка решала проблему. – Talon06

+0

Спасибо! Это также помогло мне. –

1

Я лично не создавал файл, а затем удалял его, чтобы получить URL-адрес каталога. Вы должны иметь возможность получить именно это, выполнив fileSystem.root.toURL() - fileSystem.root является DirectoryEntry и поэтому содержит методы, которые вы ожидаете увидеть в DirectoryEntry.

Немного быстрее.

Update

Если вы чувствуете, склонны использовать файл удалить метод, вы должны использовать toURL() на FileEntry, не FULLPATH. Я думаю, что toURL() возвращает URL-адрес, который можно использовать в приложении HTML.

Но, как я уже сказал, предпочтительнее fileSystem.root.toURL(). Пример кода следующим образом:

Таким образом, ваш код становится:

window.requestFileSystem(
    LocalFileSystem.PERSISTENT, 
    0, 
    function (fileSystem) { 
     var url = 'http://cordova.apache.org/images/cordova_bot.png', 
      dir = fileSystem.root.toURL() + photo.original_name, 
      ft = new FileTransfer(); 

     ft.download(url, dir, 
      function (fileEntry) { 
       alert('Downloaded!'); 
      }, 
      function (error) { 
       alert('Download error'); 
       console.log(dir); 
      } 
     ); 
    }, 
    function (error) { 
     alert('Error getting file system'); 
    } 
); 

Попробуйте это и посмотреть, что происходит. Может показаться глупым, но я полагаю, что photo.original_name определен? И между каталогом и именем файла есть '/'?

+0

Спасибо за ваше время. К сожалению, ваше решение не работает для меня, это то же самое, что и было. Я также попытался проверить имя photo.original_name на строку, никакого результата. Я тестирую планшет Prestigio, но у меня была возможность запустить его на SGS4, и результат будет таким же. код ошибки 3, http_status 401 – radzik

+0

И точный url - файл: ///storage/emulated/0/cordova_bot.png. И, вероятно, это не моя связь, я переключил Wi-Fi на 4g, все тот же - 401 – radzik

+0

Какую версию Cordova-android вы используете? Если вы запустите 'cordova platform ls' в своем каталоге проекта, он должен там сказать. – keldar

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