1

我創建了一個簡單的科爾多瓦android應用程序,我試圖從網址下載圖像到圖片庫,但我真的不知道什麼是錯的。 我已經在計算器這裏搜索了很多,主要包括以下環節:科爾多瓦 - 從URL下載圖像到圖片庫

Phonegap - Save image from url into device photo gallery

How to save an Image object into a file in Android with Phonegap?

我已經安裝了科爾多瓦文件傳輸的插件,並試圖從官方網站做例子,但沒有工作過:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file-transfer/

我試過2個不同的代碼,它們是:

1)第一次嘗試:

document.getElementById("myBtn").addEventListener("click", function() { 
    download("http://cordova.apache.org/static/img/cordova_bot.png", "data", "new_file"); 
}); 

function download(URL, Folder_Name, File_Name) { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fileSystemSuccess, fileSystemFail); 

    function fileSystemSuccess(fileSystem) { 
     var download_link = encodeURI(URL); 
     ext = download_link.substr(download_link.lastIndexOf('.') + 1); //Get extension of URL 

     var directoryEntry = fileSystem.root; // to get root path of directory 
     directoryEntry.getDirectory(Folder_Name, { 
      create: true, 
      exclusive: false 
     }, onDirectorySuccess, onDirectoryFail); // creating folder in sdcard 
     var rootdir = fileSystem.root; 
     var fp = rootdir.toURL(); 
     fp = fp + "/" + Folder_Name + "/" + File_Name + "." + ext; // fullpath and name of the file which we want to give 
     filetransfer(download_link, fp); 
    } 

    function onDirectorySuccess(parent) { 
     // Directory created successfuly 
    } 

    function onDirectoryFail(error) { 
     alert("Unable to create new directory: " + error.code); 
    } 

    function fileSystemFail(evt) { 
     //Unable to access file system 
     alert(evt.target.error.code); 
    } 
} 

function filetransfer(download_link, fp) { 
    var fileTransfer = new FileTransfer(); 
    fileTransfer.download(download_link, fp, 
     function (entry) { 
      alert("download complete: " + entry.fullPath); 
      //cordova.plugins.imagesaver.saveImageToGallery(entry.fullPath, successCallback, errorCallback); 
     }, 
     function (error) { 
      alert("download error source " + error.source); 
     } 
    ); 
} 

在這種嘗試中,我得到的警告信息「下載完成:/my_folder/new_file.png」,但我找不到在哪裏的圖片被下載。 這絕對不是在圖片庫或任何我能找到它的地方。

2)第二次嘗試:

function download() { 
    window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) { 

     var url = 'http://cordova.apache.org/static/img/cordova_bot.png'; 
     fs.root.getFile('downloaded-image.png', { 
      create: true, 
      exclusive: false 
     }, function (fileEntry) { 
      file_transfer(fileEntry, encodeURI(url), true); 

     }, onErrorCreateFile); 

    }, onErrorLoadFs); 
} 

function onErrorLoadFs(msg){ 
    alert(msg); 
} 

function onErrorCreateFile(msg){ 
    alert(msg); 
} 

function file_transfer(fileEntry, uri, readBinaryData) { 

    var fileTransfer = new FileTransfer(); 
    var fileURL = fileEntry.toURL(); 

    fileTransfer.download(
     uri, 
     fileURL, 
     function (entry) { 
      alert("download complete: " + entry.toURL()); 

      if (readBinaryData) { 
       // Read the file... 
       readBinaryFile(entry); 
      } else { 
       // Or just display it. 
       displayImageByFileURL(entry); 
      } 

     }, 
     function (error) { 
      alert("download error source " + error.source); 
      alert("download error target " + error.target); 
      alert("upload error code" + error.code); 
     }, 
     null, // or, pass false 
     { 
      //headers: { 
      // "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==" 
      //} 
     } 
    ); 
} 

在這種嘗試中,我得到的警告信息「下載完整的:文件:///data/user/0/com.companyname.xxxxxxx/cache/downloaded -image.png「,但我也無法在設備中的任何位置找到圖片。

我已經在兩個不同的android設備上試過應用程序。

+0

我建議爲這樣的東西創建自己的科爾多瓦插件。我有很多的android開發和處理文件的正確創建是一個時間的B字,我不會相信他們的插件。 –

回答

0

你應該改變行

window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, 
-> 
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 

和 如果下載成功,你應該重新掃描設備存儲,因爲如果文件被下載科爾多瓦不知道。

所以我做了一個插件,

這是下載後更新畫廊的插件。

https://github.com/pouu69/cordova-plugin-gallery-refresh