ios
  • cordova
  • phonegap-plugins
  • 2016-06-14 58 views 1 likes 
    1

    我正在构建基于PhoneGap的iOS平台应用程序。
    我想下载几个图像文件到一个特定的目录。PhoneGap将图像下载到特定文件夹

    我想下载的图像保存在文件夹中www/my_img/

    所以,在我的应用我还可以使用此图片为:

    <img src="my_img/downloaded.jpg" width="100px" height="100px"> 
    

    我使用PhoneGap的插件下载图片:

    var url = 'http://myServer.com/img.jpg'; 
    var filePath = 'www/my_img/'; 
    var fileTransfer = new FileTransfer(); 
    var uri = encodeURI(url); 
    
    fileTransfer.download(
        uri, 
        filePath, 
        function(entry) { 
         console.log("download complete: " + entry.fullPath); 
        }, 
        function(error) { 
         console.log("download error source " + error.source); 
         console.log("download error target " + error.target); 
         console.log("upload error code" + error.code); 
        }, 
        false, 
        { 
         headers: { 
         } 
        } 
    ); 
    

    但问题是图像没有得到保存在指定的文件夹。
    如何将下载的图像保存在“www/my_img /”文件夹中?

    回答

    1

    的问题是在对于filePath值。这需要是一个设备绝对文件路径文件系统URL

    看一看的comptibility notes part of the docs

    有,你可以使用一些预定义的文件夹。我认为最适合您的情况(它的R/W,而无需设置任何权限,并且是持续性)是:

    cordova.file.dataDirectory 
    

    你可以在其中存储下载的图像,并且在完成时,设置图像SRC 。

    翻译这对你的情况:

    HTML

    <img id="downloadedimage" width="100px" height="100px"> 
    

    JS

    var url = 'http://myServer.com/img.jpg'; 
    var filePath = cordova.file.dataDirectory + '/img.png'; 
    var fileTransfer = new FileTransfer(); 
    var uri = encodeURI(url); 
    
    fileTransfer.download(
        uri, 
        filePath, 
        function(entry) { 
         console.log("download complete: " + entry.fullPath); 
         document.getElementById("downloadedimage").src = entry.toURL(); 
        }, 
        function(error) { 
         console.log("download error source " + error.source); 
         console.log("download error target " + error.target); 
         console.log("upload error code" + error.code); 
        }, 
        false, 
        { 
         headers: { 
         } 
        } 
    ); 
    
    +0

    因此,iOS上的cordova.file.applicationStorageDirectory' +'Documents'会给我文件夹来读取/写入文件。 “cordova.file.dataDirectory”也是一样的吗?这个变量是直接访问还是需要编写代码来获取@Zappescu在他的答案中提到的路径?哪一个更可靠? – User7723337

    +0

    我用一个例子更新了答案。希望能帮助到你。 –

    +0

    感谢细节。如果我想保存的文件夹不存在,那它会被创建吗?或者首先我需要在'cordova.file.dataDirectory'下创建新文件夹,然后保存到它? – User7723337

    1

    我想你应该在访问文件系统之前。如果确定,您可以在您访问的目录中创建的文件夹中下载图像。如果你需要,我可以给你一个片段。

    编辑:

    1)访问文件系统:

    function onDeviceReady() { 
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSCategory, fail); 
    } 
    

    2)如果文件系统的得到了,得到主目录:

    function gotFSCategory(fileSystem) { 
        window.fileSystem = fileSystem; 
        fileSystem.root.getDirectory(window.appRootDirName, { 
         create : true, 
         exclusive : false 
        }, dirReadyCategory, fail); 
    } 
    

    3)当主目录已准备就绪,节约它并继续:

    function dirReadyCategory(entry) { 
        window.appRootDir = entry; 
        console.log('application dir is ready with window.appRootDir: '+JSON.stringify(window.appRootDir)); 
        // Start my code: 
        start_my_code(); 
    } 
    

    作为用于文件路径变种,我使用这一个(每个文件):

    var filePath = window.appRootDir.toURL() + fileName; 
    
    +0

    感谢您的重播,我怎么可以访问文件系统。在我的案例目录中,我将要保存的图像将存在于www文件夹中。我只需要设置路径到那个目录不是吗?片段将有很大帮助。 – User7723337

    +0

    感谢代码片段,但我是否需要经过这个方法调用过程来获取路径,或者我可以使用'cordova.file。applicationStorageDirectory'变量是由@Philip Bijker在他的回答中提到的? – User7723337

    +0

    我之前没有使用@Philip建议,我可以告诉你,我在我的Android/iOS/Win应用程序中使用我的代码而没有已知问题 – Zappescu

    相关问题