ios
  • cordova
  • phonegap-plugins
  • 2016-06-14 70 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

    相關問題