2014-11-21 3 views
0

В моих приложениях, работающих с телефоном phone cord 3.5 на Android 4.0, использование плагина переноса файлов для загрузки файлов работает хорошо, но dowloading создает исключение. Я тестировал на устройстве и на эмуляторе Bluestacks этот код прекрасно работает с Cordova 2.9, но когда я обновляю Кордову 3,5 dowloading создать исключениеPhonegap fileTransfer.Download не работает код ошибки 3

функцию загрузки:

download = function() {  
    viewModel.popup_download.visible(false); 
    loadPanelVisible(true); 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) { 
     fileSystem.root.getFile(viewModel.file_download_name(), {create: true, exclusive: false}, function() { 
     var ft = new FileTransfer(); 
     uri="https://api.exemple-exemple.com/api/Dav/Download/"+path+"/"+viewModel.folder_downlod(); 
     filePath=currPath+"/"+viewModel.file_download_name(); 

     ft.download(uri,filePath,win_download,fail_download,false, { 
       headers: { 
        "HeaderUserData": JSON.stringify({ ID: id, Token: token }), 
        "HeaderDavData": JSON.stringify({ UserName: viewModel.userId_dav(), Password: viewModel.userPassword_dav() }), 
       } 
     }); 

     }, fail); 
    }, fail); 
} 
+0

l'исключение: { "цель": "Файл: \/\/\/мнт \/SDCard \/окна \/PublicPictures \ /Box-BV-Blanche.jpg", "источник": «https: \/\/api.phosphorus-technologies.com \/api \/Dav \/Download \/dossier1 \ /Box-BV-Blanche.jpg", "http_status": 200, "код": 3 } java.lang.NullPointerException at org.apache.cordova.PluginResult. (PluginResult.java:52) в org.apache.cordova.filetransfer.FileTransfer $ 4.run (FileTransfer.java:798) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112) на Java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) – msuser

ответ

0

Переменная currPath никогда и я не думаю, что вы хотите использовать его вообще. Вы передали папку загрузки из viewModel, чтобы затем получить результат в обратном вызове.

download = function() {  
    viewModel.popup_download.visible(false); 
    loadPanelVisible(true); 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) { 
     fileSystem.root.getFile(viewModel.folder_downlod(), {create: true, exclusive: false}, function(filePath) { // ADD PARAMETER HERE 
     var ft = new FileTransfer(); 
     uri="https://api.phosphorus-technologies.com/api/Dav/Download/"+path+"/"+viewModel.folder_downlod(); //IS THIS A VALID URL ENDING IN THE FOLDER NAME? 
//REMOVE FILE PATH HERE 
     ft.download(uri,filePath,win_download,fail_download,false, { 
       headers: { 
        "HeaderUserData": JSON.stringify({ ID: id, Token: token }), 
        "HeaderDavData": JSON.stringify({ UserName: viewModel.userId_dav(), Password: viewModel.userPassword_dav() }), 
       } 
     }); 

     }, fail); 
    }, fail); 
} 

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

+0

filePath = currPath + "/" + viewModel.folder_downlod(); currPath - это путь к файлу в устройстве. viewModel.folder_downlod() - это имя файла в целевом устройстве «:» file: ///mnt/sdcard/windows/PublicPictures/Box-BV-Blanche.jpg «Где я решил сделать файл загрузки – msuser

+0

Хорошо, это имеет смысл. Для ясности вы должны переименовать метод' folder_download' в 'file_download' или (еще лучше)' download_filename' – kindasimple

+0

ok Я его отредактировал. отлично работает с кордовой 2.9, но когда я обновляю кордову до 3.5-dowloading, создайте исключение – msuser

3

У вас возникли проблемы с пробелами и специальными символами, вы должны использовать encodeURI перед отправкой запроса.

download = function() {  
viewModel.popup_download.visible(false); 
loadPanelVisible(true); 
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) { 
    fileSystem.root.getFile(viewModel.file_download_name(), {create: true, exclusive: false}, function() { 
    var ft = new FileTransfer(); 
    uri="https://api.phosphorus-technologies.com/api/Dav/Download/"+path+"/"+viewModel.folder_downlod(); 
    filePath=currPath+"/"+viewModel.file_download_name(); 

    uri = encodeURI(uri); 

    ft.download(uri,filePath,win_download,fail_download,false, { 
      headers: { 
       "HeaderUserData": JSON.stringify({ ID: id, Token: token }), 
       "HeaderDavData": JSON.stringify({ UserName: viewModel.userId_dav(), Password: viewModel.userPassword_dav() }), 
      } 
    }); 

    }, fail); 
}, fail);}