ios - Cordova iOS 应用程序目录和文件 url 不同(UUID 问题)

标签 ios cordova ember.js path uuid

我创建了一个 Cordova 应用程序,它从服务器获取图像并将它们保存到 iPad。但是,当尝试在应用程序中显示图像时,图像不会加载。此类文件路径的一个示例可能是:

file:///var/mobile/Containers/data/Application/FC87E925-9753-4D9F-AE27-54FCF9B0451E/Documents/-media-3405-company.png

但是,在检查 cordova.file.applicationDirectory 变量时,我找到了另一条路径,例如(请注意,即使我在同一次运行中检查两个变量,UUID 也不同)

file:///var/containers/Bundle/Application/D8266D08-18A4-4293-B78A-B4597FC0C6B8/salesApp.app/

根据documentation ,正确的路径“应该”是:(但是,这也不起作用)

file:///var/mobile/Applications/UUID/Documents/-media-3405-company.png

这是我用来加载图像的代码,这些图像已正确保存到设备

const downloadFile = (url, fileName, callback) => {
      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, (fs) => {
          fs.root.getFile(fileName, {
            create: true,
            exclusive: false
          }, (fileEntry) => {
            const fileURL = fileEntry.toURL()
            const fileTransfer = new FileTransfer()
            fileTransfer.download(
              url,
              fileURL,
              (entry) => {
                const file = entry.toURL() // <--- HERE
                content.pushObject('Downloaded ' + entry + ' (' + fileName + ') ' + file)
                callback(file)
              },
              (error) => {
                content.pushObject('error ' + error.code + '(' + fileName + ')')
                if (error.code === FileTransferError.CONNECTION_ERR) {
                  downloadFile(url, fileName) // Try again
                } else {
                  decrement(url) // Ignore this file
                }
              }
            )
          }, (error) => {
            alert(2)
          })
      }, () => {
        alert(3)
      })
    }

更新:检查 cordova.file.documentsDirectory 的值,我发现它返回的路径类似于:file:///var/mobile/Containers/Data/Application/{UUID}/文档/

更新:以下代码将返回两个不同的 UUID:

alert(cordova.file.applicationDirectory); // file:///var/containers/Bundle/Application/54E0F914-C45B-4B8F-9067-C13AF1967760/salesApp.app/
alert(cordova.file.documentsDirectory);   // file:///var/mobile/Containers/Data/Application/73806E90-90B4-488C-A68A-2715C3627489/Documents/

当检查 entry.toURL() 的路径时,我得到与 cordova.file.documentsDirectory 中返回的相同的 UUID。

最佳答案

当您声明“图像不会加载”时,您应该提供用于加载图像的代码。 您提供的代码用于下载图片,它运行良好。

由于您没有提供用于加载图像的代码,我尝试了两种方法,但都有效

  1. 在 InAppBrowser 上打开文件。我安装了 cordova-plugin-inappbrowser 并打开了这样的文件 window.open(file,'_blank');
  2. 在 img 标签上显示文件。我在 index.html 中创建了一个 img 标签 <img id="downloaded" src=""/>在我的回调中,我将获得的文件分配给 src document.getElementById("downloaded").src = file;

他们都成功了。

因此您应该提供用于加载图像的代码,因为问题可能就在那里。

你下载的路径没问题。

由于文档已过时,您将获得不同的 UUID。在 Xcode 6/iOS8 之前,应用程序沙箱在同一个文件夹中有 Bundle 容器和 Data 容器(文档提到的那个有一个通用的 UUID),但是自 Xcode 6/iOS8 以来,应用程序文件(Bundle 容器)在一个路径中并且App数据文件在另一个(数据容器)中。

但这对您来说应该不是问题。

Answer that talks about the file structure changes

关于ios - Cordova iOS 应用程序目录和文件 url 不同(UUID 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570216/

相关文章:

android - 如何让 Cordova 自动签署发布 APK?

ember.js - Ember : Promise (destroyRecord(). then()) 请求成功失败

ember.js - 当 EmberJS 中的模型属性更改时重新渲染 View

ios - 前向声明问题 - ARC 重构

ios - 如何获取UIImage在特定点击点的RGBA值

cordova - 在用户的主屏幕上安装应用程序快捷方式

android - Cordova Android 在运行时以编程方式设置 windowBackground

javascript - 如何将 Ember 查询参数与 beforeModel 和 select 一起使用?

ios - 为什么我的图像的每行字节数大于其每像素字节数乘以其宽度?

ios - Apple 喜欢在 iOS 的 UICollectionView 中摇动图标?