IOS升级app后imageURI变化
Posted
技术标签:
【中文标题】IOS升级app后imageURI变化【英文标题】:imageURI changes after IOS upgrade of app 【发布时间】:2014-02-01 23:34:53 【问题描述】:我有一个 jquery 移动应用程序(phonegap 构建)。我有一个函数可以从设备的照片库中获取图像的 uri。我将 uri 作为字符串存储在本地存储中,因此下次打开页面时,图像会使用 uri 显示。所有这一切都很好(我没有得到图像的 Data-UrI,因为我不想用完本地存储,而且我当然不想将图像上传到服务器,因为应用程序正在使用学校(隐私问题)。不过,在设备上很好。在我对应用程序进行更新之前,一切正常。安装更新后,图像的 URI 会发生变化。如何获得所选图片的静态 URI。这是我用来从图库中获取图像的代码。:
// javascript Document //Get Picture stuff
navigator.camera.getPicture(onPhotoURISuccess, onFail, quality: 50, destinationType:
destinationType.FILE_URI, sourceType:Camera.PictureSourceType.SAVEDPHOTOALBUM);
var pictureSource; // picture source
var destinationType; // sets the format of returned value
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
function onPhotoURISuccess(imageURI)
// Uncomment to view the image file URI
console.log(imageURI);
localStorage.setItem("piclink", imageURI)
// Get image handle
var largeImage = document.getElementById('largeImage');
// Unhide image elements
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
largeImage.src = imageURI;
// Called if something bad happens.
function onFail(message) alert('Failed because: ' + message);
我应该提到,我应用的更新不会对相机代码进行任何更改。所有数据都很好地保存在本地存储中,我可以通过控制台看到它保存并调用 URI 没有问题,但是在更新后的 URI 路径中,路径发生了变化(一大串数字和破折号)。 bTW,安卓版没有问题。任何帮助将不胜感激
【问题讨论】:
【参考方案1】:我的理解是,您保存到 localStorage 的 imageURI 只是 CDV Camera 插件处理的名为 cdv_* 的临时文件。正如 user2603892 正确指出的那样,您似乎关心的是应用在更新上的新应用位置标识符。但是,可能还有其他几个问题需要考虑……相机插件将临时文件按顺序命名为从库中选择的文件,或作为照片拍摄的文件。 cdv_photo_001.jpg、cdv_photo_002.jpg 等。这会一直持续到您执行 camera.cleanup() 来删除 cdv_* 文件。
插件将这些文件存储在应用程序根目录之外的 /tmp 文件夹中。显然,ios 在更新时也不会复制它。
来自模拟器的示例:imageURI = file:///Users/xxxxxxx/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/B7B2005C-C116-4BCB-897D-CD46672123C3/tmp/cdv_photo_001.jpg
建议将您的文件(不是文件名)重命名并保存到 1) Documents 文件夹或 2) Application Support 文件夹,然后引用它以供将来使用。
希望这会有所帮助。
【讨论】:
谢谢。当您说“1)文档文件夹或 2)应用程序支持文件夹,然后引用它以供将来使用”时,我不确定我是否理解权限。我以为您的应用程序基本上没有存储权限。或者,如果我将图片存储到用户的 doc 文件夹中,我基本上是在他们的卷中创建图像的副本吗?抱歉,对此很陌生。 您的应用在其沙箱中拥有存储权限。也许查看 CDVFile 插件会有所帮助。此外,Documents 文件夹是设备上的默认“共享”存储,它也与 iCloud 同步。是的,您将从他们的卷中存储所选图像的副本,在设备上。这样,您将拥有一个在您的控制之下的固定 URI(例如,当您需要时更新它)并且还允许您清理相机插件的 tmp 文件夹,如果您还没有这样做的话,因为它可能会变得非常大。 【参考方案2】:我知道这是一篇旧帖子,但我想分享我的发现,希望它可以帮助其他人。我在一个应用程序上遇到了同样的问题,它必须在本地存储图像而不将它们上传到服务器。似乎问题正在发生,因为 iTunes 将更新安装在 iOS App Programming Guide 中所述的新应用程序目录中
应用程序更新期间保存的文件 当用户下载应用程序更新时,iTunes 会将更新安装在新的应用程序目录中。然后它将用户的数据文件从旧安装移动到新的应用程序目录,然后再删除旧安装。以下目录中的文件保证在更新过程中被保留:
<Application_Home>/Documents
<Application_Home>/Library
虽然其他用户目录中的文件也可能被移动,但您不应依赖它们在更新后存在。
正如Here所讨论的那样。
您在帖子中提到的“大量数字和破折号”是应用程序目录。每次更新都会更改,因此保存的 URI 将与更新后的当前 URI 不同。
我仍在寻找解决方法,但还没有找到任何东西。
【讨论】:
感谢您的更新——是的,这有点痛苦,因为我的应用程序使用的图像不需要上传到服务器。事实上,因为该应用程序用于学校,我们不希望照片离开相机。希望能找到解决办法。以上是关于IOS升级app后imageURI变化的主要内容,如果未能解决你的问题,请参考以下文章