Jquery IOS升级应用程序后imageURI发生变化

Jquery IOS升级应用程序后imageURI发生变化,jquery,ios,camera,phonegap-build,Jquery,Ios,Camera,Phonegap Build,我有一个jquery移动应用程序(phonegap构建)。我有一个函数,可以从设备的照片库中获取图像的uri。我将uri作为字符串存储在本地存储器中,以便下次打开页面时,使用uri显示图像。所有这些都可以正常工作(我没有获取图像的数据UrI,因为我不想耗尽本地存储空间,而且我当然不想将图像上载到服务器,因为该应用程序正在学校中使用(隐私问题)。但在设备上没有问题。在我对应用程序进行更新之前,一切都正常。安装更新后,图像的URI会更改。如何获取所选图片的静态URI。以下是我用于从库中获取图像的代码

我有一个jquery移动应用程序(phonegap构建)。我有一个函数,可以从设备的照片库中获取图像的uri。我将uri作为字符串存储在本地存储器中,以便下次打开页面时,使用uri显示图像。所有这些都可以正常工作(我没有获取图像的数据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);
     }

我应该提到的是,我应用的更新不会对摄像头代码进行任何更改。所有数据都保留在localstorage中。很好,我可以通过控制台看到,它保存并调用URI没有问题,但是在更新后的URI路径中,路径发生了更改(一个巨大的数字和破折号字符串)顺便说一句,Android版本没有问题。任何帮助都将不胜感激。

我知道这是一篇老文章,但我想分享我的发现,希望它能帮助其他人。我在一个必须在本地存储图像而不将其上传到服务器的应用程序上遇到了同样的问题。似乎出现问题的原因是iTunes将更新安装在新的应用程序目录中,如中所述

应用程序更新期间保存的文件当用户下载应用程序更新时,iTunes会将更新安装在新的应用程序目录中。然后,iTunes会将用户的数据文件从旧安装移到新的应用程序目录中,然后再删除旧安装。以下目录中的文件保证保留在更新过程中编辑:

你在文章中提到的“巨大的数字和破折号字符串”是应用程序目录。这在每次更新时都会更改,因此保存的URI在更新后将与当前URI不同


我仍在寻找解决方法,但还没有找到任何东西。

我的理解是,您保存到localStorage的imageURI只是cdv摄像头插件处理的cdv_u*命名的临时文件。正如user2603892正确指出的,您关心的似乎是新的应用程序位置标识符正在applie中然而,可能还有其他几个问题需要考虑……相机插件顺序地命名为从库中选取的临时文件,或者作为照片。CDVAXYMPY1.0.1.JPG,CDVAXIPORY2.JPG等等。这一直持续到你做一个摄像头.CuffUp(),它删除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)应用程序支持文件夹,然后将其引用以供将来使用”时,我不确定是否理解权限。我以为你的应用程序基本上没有存储权限。或者,如果我将图片存储到用户的文档文件夹中,我基本上是在他们的卷中创建图像的副本吗?很抱歉,这是非常新的。您的应用在其沙盒中具有存储权限。也许研究CDVFile插件会有所帮助。此外,Documents文件夹是设备上的默认“共享”存储,也与iCloud同步。是的,您将在设备上存储从卷中选择的图像的副本。这样,您将有一个固定的URI在您的控制下(例如,在您需要时更新它),并且还将允许您清理相机插件的tmp文件夹,如果您没有这样做的话,因为它可能会变得相当大。
<Application_Home>/Documents
<Application_Home>/Library