在phonegap中获取设备绝对路径?

Posted

技术标签:

【中文标题】在phonegap中获取设备绝对路径?【英文标题】:Get Device absolute path in phonegap? 【发布时间】:2014-04-26 10:01:18 【问题描述】:

我使用的是 Phonegap 3.3.0,之前我使用的是 2.5.0,其中 entry.fullPath 将提供设备完整路径。 这些路径通常看起来像

/var/mobile/Applications/<application UUID>/Documents/path/to/file  (ios)
/storage/emulated/0/path/to/file                                    (android)

由于不推荐使用该方法,因此我使用 entry.toURL() 方法获取路径。该方法现在将返回格式为

的文件系统 URL
cdvfile://localhost/persistent/path/to/file

在我的应用程序中,正在将 URL 传递给 Native 函数,并从本机打开一个文件。但是如果我将路径传递给 Native,iOS 将无法检测到该文件。同样,如果我硬编码绝对路径,应用程序会检测到该文件。

如何使用fileSystem URL以native或其他方式访问文件获取设备绝对路径?

提前致谢。

【问题讨论】:

【参考方案1】:

toURL() 方法或nativeURL 属性应该返回想要的结果:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem)
    console.log("fileSystem.root.toURL()="+fileSystem.root.toURL());
    console.log("fileSystem.root.toInternalURL()="+fileSystem.root.toInternalURL());
    console.log("fileSystem.root.nativeURL="+fileSystem.root.nativeURL);
, function()
    alert("fails!");
);

使用cordova 3.5,iPad模拟器的输出为:

fileSystem.root.toURL()=file:///Users/myuser/Library/Application%20Support/iPhone%20Simulator/7.1/Applications/1717CB5F-4032-45C7-8CA2-342502447F36/Documents/
fileSystem.root.toInternalURL()=cdvfile://localhost/persistent/
fileSystem.root.nativeURL=file:///Users/myuser/Library/Application%20Support/iPhone%20Simulator/7.1/Applications/1717CB5F-4032-45C7-8CA2-342502447F36/Documents/

...在 Android 模拟器 (Genymotion) 中是:

fileSystem.root.toURL()=file:///storage/emulated/0/ 
fileSystem.root.toInternalURL()=cdvfile://localhost/persistent/ 
fileSystem.root.nativeURL=file:///storage/emulated/0/ 

【讨论】:

完美运行,谢谢。只是给其他人的说明,这需要在设备准备好时调用:document.addEventListener("deviceready", onDeviceReady, false);,然后在您的设备准备回调中放置 window.requestFileSystem 调用,例如:function onDeviceReady()...【参考方案2】:
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() 
    console.log("device is ready");
    window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);


function fail() 
    console.log("failed to get filesystem");


function gotFS(fileSystem) 
    console.log("got filesystem");

        // save the file system for later access
    console.log(fileSystem.root.fullPath);
    window.rootFS = fileSystem.root;


function downloadImage(url, fileName)
    var ft = new FileTransfer();
    ft.download(
        url,
        window.rootFS.fullPath + "/" + fileName,
        function(entry) 
            console.log("download complete: " + entry.fullPath);

        ,
        function(error) 
            console.log("download error" + error.code);
        
    );

【讨论】:

使用 fileSystem.root.nativeURL【参考方案3】:
window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);

function gotFS(fileSystem) 
  alert("entered gotFS: " + fileSystem.root.toURL);

【讨论】:

这将给出这样的路径 cdvfile://localhost/persistent/path/to/file.. 我想要绝对路径

以上是关于在phonegap中获取设备绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过绝对路径访问我的应用程序文件 - windows phone - Phonegap/Cordova

spring中获取绝对路径的几种方法

java中怎样获取当前路径的绝对路径

WebAPI 怎样获取相对路径 获取本地路径

node rename绝对路径

php获取上级文件绝对路径