如果我使用相机模块复制图像,我会使用
myfileObj.path = file.toNativeURL()
获取文件路径.如果我将此路径放入img-tag,我会在AndroID上显示该图片.
在iOS上它不起作用. file.toNativeURL()的结果:
myfileObj.path -> file:///Users/.../library/Application%20Support/..../myFolder/myImage.JPG
使用文件1.0我必须构建网址,它看起来像这样:
myfileObj.path = dirTarget.toURL() + '/' + targetfilename myfileObj.path -> cdvfile://localhost/persisten/myFolder/myImage.JPG
视频和音频不起作用,但至少图片.
使用文件1.1.0 / 1.1.1,此方法的结果也不同:
myfileObj.path -> file:///Users/mak/library/.../myFolder/myImage.JPG?ID=.....&ext=JPG
这在iOS上也不起作用.
如何使用cordova文件模块版本1.1.0和1.1.1获取工作文件路径?
编辑:我在做什么,什么不起作用:
我从媒体库中复制图像并将其放入我自己创建的文件夹中.
什么在AndroID中有效,在iOS中不起作用:
在AndroID中,media-Tags的src属性能够显示资源,iOS无法在src-path中找到资源.
从媒体库中捕获文件:
navigator.camera.getPicture(onSuccess,onFail,{ destinationType: Camera.DestinationType.NATIVE_URI,sourceType : Camera.PictureSourceType.PHOTOliBRARY,mediaType: Camera.MediaType.ALLMEDIA });
成功回调:
function onSuccess(imageData) { A.Storefile(imageData,ID);}
创建文件夹和存储文件:
A.Storefile = function(file,IDBox) { var targetDirectory = Config.getRootPath(); window.resolveLocalfileSystemURL(file,resolvefileSystemSuccess,resolvefileSystemError); function resolvefileSystemSuccess(fileEntry) { fileEntry.file(function(filee) { mimeType = filee.type; getfileSuccess(fileEntry,mimeType); },function() { });}function getfileSuccess(fileEntry,mimeType) { var targetfilename = name + '.' + fileNativeType; var parentname = targetDirectory.substring(targetDirectory.lastIndexOf('/')+1),parentEntry = new DirectoryEntry(parentname,targetDirectory); window.requestfileSystem(LocalfileSystem.PERSISTENT,function(fileSystem) { fileSystem.root.getDirectory(targetDirectory,{create: true,exclusive: false},function(dirTarget) { fileEntry.copyTo(dirTarget,targetfilename,function(entry) { addfileTolocalstorage(entry); },function() { }) }) },resolvefileSystemError);}
将文件信息存储到localstorageObject
function addfileTolocalstorage(file) { fileList.addfile( { name:file.name,internalURL: file.toNativeURL() });}
动态添加文件到dom:
myElement.find('.myMimeTypeTag').attr('src',fileList[f].internalURL);
这适用于AndroID,而不适用于iOS.
iOS-img-container的结果:
错误信息:
DEPRECATED: Update your code to use 'toURL'
toURL也不起作用
ID="org.apache.cordova.file"version="1.1.1-dev"解决方法 我刚刚测试了这个,稍微简化了你的代码版本(你的代码似乎有很多额外的结构没有显示,但是如果我在这里做了什么和什么之间有显着差异你的应用程序确实如此,然后让我知道.问题在于区别.)
我使用file 1.1.0和Camera 0.2.9刚刚发布Cordova 3.5.0.
要创建应用程序,我使用了cordova命令行工具,然后运行
cordova create so23801369 com.example.so23801369 so23801369cd so23801369cordova platform add ioscordova plugin add org.apache.cordova.filecordova plugin add org.apache.cordova.camera
这会创建一个默认的“Hello,Cordova”应用程序,我已经添加了一些代码(我相信)会复制代码所做的代码.
我在index.HTML中添加了两行:
<button ID="doit">Do it</button><img src="file:///nothing" />
我编辑www / Js / index.Js看起来像这样:
var app = { initialize: function() { // Don't activate the button until Cordova is initialized document.addEventListener('deviceready',this.onDeviceReady,false); },onDeviceReady: function() { document.getElementByID('doit').addEventListener('click',app.runTest,runTest: function(ev) { var Storefile = function(file) { var targetDirectory = "myFolder"; window.resolveLocalfileSystemURL(file,resolvefileSystemError); function resolvefileSystemSuccess(fileEntry) { console.log("resolveLocalfileSystemURL returned: ",fileEntry.toURL()); fileEntry.file(function(filee) { mimeType = filee.type; getfileSuccess(fileEntry,mimeType); },function() { }); } function resolvefileSystemError() { console.log("resolvefileSystemError: FAIL"); console.log(arguments); alert("FAIL"); } function getfileSuccess(fileEntry,mimeType) { var targetfilename = "myImage.JPG"; window.requestfileSystem(LocalfileSystem.PERSISTENT,function(fileSystem) { fileSystem.root.getDirectory(targetDirectory,function(dirTarget) { fileEntry.copyTo(dirTarget,function(entry) { console.log("copyTo returned: ",entry.toURL()); // I have replaced the localstorage handling with this code // addfileTolocalstorage(entry); var img = document.querySelector('.myMimeTypeTag'); img.setAttribute('src',entry.toNativeURL()); },function() { }); }); },resolvefileSystemError); } }; var onSuccess = function(imageData) { console.log("getPicture returned: ",imageData); Storefile(imageData); }; var onFail = function() { console.log("getPicture FAIL"); console.log(arguments); alert("FAIL"); }; ev.preventDefault(); ev.stopPropagation(); navigator.camera.getPicture(onSuccess,{ destinationType: Camera.DestinationType.NATIVE_URI,mediaType: Camera.MediaType.ALLMEDIA }); }};
当我运行它时,我可以从媒体库中选择一个图像,并在页面中成功显示它,图像src设置为复制的图像文件的URL.如果我将Safari开发工具连接到iPad,我会看到此控制台输出:
[Log] getPicture returned: assets-library://asset/asset.JPG?ID=F9B8C942-367E-433A-9A71-40C5F2806A74&ext=JPG (index.Js,line 49)[Log] resolveLocalfileSystemURL returned: cdvfile://localhost/assets-library/asset/asset.JPG?ID=F9B8C942-367E-433A-9A71-40C5F2806A74&ext=JPG (index.Js,line 18)[Log] copyTo returned: file:///var/mobile/Applications/9C838867-30BE-4703-945F-C9DD48AB4D64/documents/myFolder/myImage.JPG (index.Js,line 36)[Log] DEPRECATED: Update your code to use 'toURL' (Entry.Js,line 202)
这显示了相机和文件插件通过三种不同类型的URL:
> Camera返回assets-library:// URL,其中包含用于标识资产的查询参数
>调用resolveLocalfileSystemURL,将其转换为cdvfile:// URL,也使用查询参数,作为内部Cordova表示.
>复制后,file返回一个新文件:/// URL显示图像在文件系统上的新位置.此URL没有查询参数. (在此条目上调用toNURURUR()会立即返回相同的URL,从文件1.1.0开始)
这个最终的URL可以被iOS用作图像源,因此分配给< img>的是什么.元件.
总结以上是内存溢出为你收集整理的android – phonegap iOS file.path全部内容,希望文章能够帮你解决android – phonegap iOS file.path所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)