【问题标题】:Phonegap Build: download image in one of the folders of your appPhonegap Build:将图像下载到您的应用程序的文件夹之一
【发布时间】:2014-06-19 06:34:39
【问题描述】:

如果我直接用

指定路径,我可以下载图像

file:///storage/sdcard0/

如何将图像保存到我的应用程序中的一个文件夹中?我尝试了this 方法来设置应用程序路径,但它对我不起作用。

这是我目前使用的,如果你想保存和图像到 sdcard,它可以工作:

var fileName = "myImage.png";  
var fileTransfer = new FileTransfer();

var uri = encodeURI("http://my.url.to.image/myImage.png");   

var filePath = "file:///storage/sdcard0/uploads/myImage.png";

fileTransfer.download(
    uri,
    filePath,
    function(entry) {
        alert("download complete: " + entry.fullPath);
        console.log("download complete: " + entry.fullPath);
    },
    function(error) {  
        alert("download error source/target/code:\n" + error.source +" \n||| "+error.target+" \n||| "+error.code);
     console.log("download error source/target/code " + error.source+" / "+error.target+" / "+error.code); 
    }  
); 

如果我使用这个功能:

function getPhoneGapPath() {
    'use strict';
    var path = window.location.pathname;
    var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1);
    return phoneGapPath;
}

我得到 /android_asset/www/。如何获得应用程序的正确路径?

该应用正在使用 AngularJS,并且未在 onDeviceReady 中引导(在我之前的开发人员就是这样做的,现在将其更改为 this 之类的东西超出了我的能力(尝试过但没有用)。

我可以参考的另一个问题是here
我也试过thisthisthisthis,但没有一个对我有用。我得到了完整路径的“”,最近我设法用 .toURL() 打印了路径,它是“cdvfile://localhost/persistent”。 如果我使用上面的下载代码现在也可以使用

filePath = "cdvfile://localhost/persistent/MyAppID/uploads/myImage.png";

但这会在 /storage/sdcard0 中创建文件夹 /MyAppID/uploads ,这又很糟糕。我的应用需要使用

获取图像
<img src="uploads/myImage.png" alt="myimg"/>

另一个有用的链接是here,但它对如何写入您自己的应用程序的预先创建的文件夹没有任何帮助。

编辑:据我所知,您不能在自己的应用程序中编写(只读)。这就是为什么我尝试使用

引用来自 sdcard 的图像
<img src="file:///storage/sdcard0/Android/data/com.app.my/cache/myImage.png" alt="myimg"/>

这行得通! :) 不幸的是,这是硬编码的并且不好,因为其他手机可能有不同的持久位置。 如果我尝试

<img src="cdvfile://localhost/persistent/Android/data/com.app.my/cache/myImage.png" alt="myimg"/>

这并没有引用图片:/(它确实在 storage/sdcard0/Android/data/com.app.my/cache/ 上下载了它)

【问题讨论】:

    标签: android angularjs cordova download phonegap-build


    【解决方案1】:

    我将使用此处插件文档中定义的文件夹别名 (https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md)。特别是cordova.file.dataDirectory。请注意,这不是,afaik,在您原始项目的 www 下,但它似乎是 首选 存储下载的地方。保存后,您可以将其解析为可用于通过 AJAX 加载的 URL,或者如果您正在下载图形,则可以在 img 标记中。

    【讨论】:

    • 感谢您抽空Raymond。我检查了该页面(我的问题中的最后一个链接),不幸的是,如果我尝试在我的应用程序中提醒 cordova.file.dataDirectory(例如 deviceready)警报甚至不会触发。 (在使用 phonegap 时尝试以任何方式打印未定义或奇怪的东西时经常发生这种情况)。最后但并非最不重要的一点是,我真的很想将图像放入我的应用程序中预先创建的文件夹之一。我不知道为什么这么复杂:)
    • 你是用PhoneGap Build还是去本地?
    • 据我所知,您现在无法修改您的应用程序文件夹,因为它们是只读的。我想我只需要使用 XHR 从 sdcard 上的某个位置获取数据 ...
    • 啊拍摄 - PGB 使用的插件较旧 - 1.0.1。最新版本有快捷方式。如果您停止使用 PGB 并在本地构建它应该可以工作。
    • 每次创建构建时,我都必须使用 pgb 在多个设备上对其进行测试:x 感谢您的宝贵时间!
    【解决方案2】:

    据我所知,您无法写入自己的应用程序(更改应用程序内的项目 - Android 上的 /www 文件夹)。

    我的解决方案是将图像保存到持久存储(通常是 SD 卡)。 您可以通过以下步骤获取应用的持久存储路径:

    function onDeviceReady() {
        console.log('Device Platform: ' + device.platform);  // returns 'Android' or 'iOS' for instance
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
        cacheFolderSubPath = "Android/data/com.id.myApp/cache/"; // this is app's cache folder that is removed when you delete your app! (I don't know what this path should be for iOS devices)  
    }
    

    然后里面gotFS成功回调

    function gotFS(fileSystem) { 
        var nturl = fileSystem.root.toNativeURL(); // cdvfile://localhost/persistent/
        window.resolveLocalFileSystemURL(nturl+cacheFolderSubPath, onResolveSuccess, onResolveFail);
    }
    

    在 onResolveSuccess 中

    function onResolveSuccess(fileEntry){
        appCachePath = fileEntry.toNativeURL()+"/"; // file:///storage/sdcard0/Android/data/com.id.myApp/cache/ in my case but some other Androids have storage/emulated/0 or something like that ... 
        continueCustomExecution();
    }
    

    现在在 continueCustomExecution() 中,您可以运行您的程序并执行您所做的任何事情......在这种情况下,将图像下载到我们之前获得的 appCachePath 中。您现在可以使用我们的 appCachePath+yourImageName 成功引用 src 标签中的图像。

    很遗憾,我仍然不知道如何在 iOS 上成功下载图像。我使用 FileTransfer 插件收到错误代码 1 ...(保存到 file:///var/mobile/Applications/my.app.id/Documents/)。可能应该保存在其他地方,但这是我在请求持久文件系统时得到的路径。

    干杯

    【讨论】:

    • 我不使用 FileTransfer 插件,我只使用普通的 XHR,我可以在 Android 和 iOS 的 FS 中下载和保存东西(在 Phonegap 3.1、3.3、3.4 和 3.5 中尝试过)。
    • 你是怎么做到的?使用 XHR 下载音频和图像文件。请举例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2014-12-18
    • 2014-02-17
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多