2016-06-28 59 views
2

您好我正在使用Phonegap創建iOS應用程序。我正在使用Filetransfer API來下載圖像文件。我使用下面的代碼來下載文件在Phonegap iOS中下載文件時出錯

 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, createFolder, null); 

    function createFolder(fileSystem) { 
     console.log('gotFS'); 
     fileSystem.root.getDirectory("MyDirectory", { 
          create: true, 
          exclusive: false 
          }, MyDirectorySuccess, MyDirectoryfail); 
    } 

    function MyDirectorySuccess(entry) { 
     console.log('gotDirectorySuccess'); 
     downloadFile(entry); 
    } 
    function downloadFile(entry) 
    { 
     console.log('downloadFile'); 

     var filePath = entry.fullPath+'test.jpg'; 
     var fileTransfer = new FileTransfer(); 
     var url = 'https://www.facebookbrand.com/img/fb-art.jpg'; 

     fileTransfer.download(
         url, filePath, function(entry) { 
         console.log("success"); 
         }, function(error) { 
         console.log("error"); 
         }, true, {}); 
    } 

當我在iOS設備上運行它,我得到的錯誤:

FileTransferError { 
    body = "Could not create path to save downloaded file: You don\U2019t have permission to save the file \U201cMyRecipeDirectory\U201d in the folder \U201cMonarch13A452.J72OS\U201d."; 
    code = 1; 
    "http_status" = 200; 
    source = "https://www.facebookbrand.com/img/fb-art.jpg"; 
    target = "cdvfile://localhost/root/MyDirectory/test.jpg"; 
} 

我如何解決這個問題?

回答

1

這是cordova-plugin-file-transfer和cordova-plugin-file插件之間的複雜錯誤。
FileTransfer插件對文件插件使用類型「root」。它是默認的,不能更改任何類型。
「根」的路徑是「/」,這是問題的原因。
例如,在iphone模擬器上,「persistent」的路徑是「/ user/{your name}/Library/...」。
您無法訪問「/」。

我試圖在getAvailableFileSystems()方法中修改@「根」路徑,CordovaLib.xcodeproj的CDVFile.m。
但是,應用程序在設置後崩潰。
有沒有聰明的方法,我決定採取不自然的方式改變字符串的方式。

下載()在CDVFileTransfer.m Line方法下這440

target = [target stringByReplacingOccurrencesOfString:@"//" withString:@"/"]; 
targetURL = [[self.commandDelegate getCommandInstance:@"File"] fileSystemURLforLocalPath:target].url; 

添加代碼。

NSString *absoluteURL = [targetURL absoluteString]; 
if ([absoluteURL hasPrefix:@"cdvfile://localhost/root/"]) { 
     absoluteURL = [absoluteURL stringByReplacingOccurrencesOfString:@"cdvfile://localhost/root/" withString:@"cdvfile://localhost/persistent/"]; 
     targetURL = [NSURL URLWithString:absoluteURL]; 
}