【问题标题】:imageURI changes after IOS upgrade of appIOS升级app后imageURI变化
【发布时间】: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,安卓版没有问题。任何帮助将不胜感激

【问题讨论】:

    标签: jquery ios camera phonegap-build


    【解决方案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 不同。

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

    【讨论】:

    • 感谢您的更新——是的,这有点痛苦,因为我的应用程序使用的图像不需要上传到服务器。事实上,因为该应用程序用于学校,我们不希望照片离开相机。希望能找到解决办法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多