PhoneGap将图像下载到特定文件夹

时间:2016-06-14 09:47:24

标签: ios cordova phonegap-plugins

我正在为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: {
        }
    }
);

但问题是图像没有保存在指定的文件夹中 如何将下载的图像保存在&#34; www / my_img /&#34;文件夹?

2 个答案:

答案 0 :(得分:2)

问题在于filePath的值。这需要是 device-absolute-file-path filesystem 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: {
        }
    }
);

答案 1 :(得分: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();
}

至于filepath var,我使用这个(每个文件一个):

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