如果我直接用
指定路径,我可以下载图像文件:///存储/ sdcard0 /
如何将图像保存到我应用中的某个文件夹中?我尝试this方法来设置应用路径,但它对我不起作用。
这是我到目前为止所使用的,如果你想保存并成像到SD卡,它可以工作:
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 我还尝试了this,this,this和this,但没有一个适合我。我得到了“”for fullPath,最近我设法用.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"/>
这不参考图片:/(它确实在存储/ sdcard0 / Android / data / com.app.my / cache /下载它)
答案 0 :(得分:1)
据我所知,你无法写入自己的应用程序(更改应用程序内的项目 - Android上的/ www文件夹)。
我的解决方案是将图像保存到PERSISTENT存储(通常是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)
}
然后在getFS成功回调
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 ...(保存到文件:///var/mobile/Applications/my.app.id/Documents/)。可能应该保存在其他地方,但这是我在请求PERSISTENT FileSystem时获得的路径。
干杯
答案 1 :(得分:0)
我会使用此处插件文档(https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md)中定义的文件夹别名。特别是cordova.file.dataDirectory。请注意,这不是afaik,在原始项目的www下,但它似乎是存储下载的首选位置。保存到那里后,您可以将其解析为可用于通过AJAX加载的URL,或者在下载图形时使用img标记。