在Phonegap iOS

时间:2016-06-28 05:30:14

标签: ios cordova download phonegap-plugins file-transfer

您好我正在使用Phonegap来创建iOS应用程序。我正在使用Filetransfer API下载图像文件。我正在使用以下代码下载文件

     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 个答案:

答案 0 :(得分:1)

这是cordova-plugin-file-transfer和cordova-plugin-file插件之间的复杂错误 FileTransfer插件使用“root”类型到File插件。它是默认的,不能更改任何类型 “root”的路径是“/”,这是问题的原因 例如,“持久性”的路径是iphone模拟器上的“/ user / {your name} / Library / ...”。
您无法访问“/”。

我试图在CordovaLib.xcodeproj的CDAFile.m的getAvailableFileSystems()方法中修改@“root”路径。
但是,应用程序在设置后崩溃了 没有聪明的方法,我决定采取不自然的方式改变字符串。

CDVFileTransfer.m第440行中的

download()方法

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];
}