【问题标题】:Swift create URL object from Data (byte array) without writing to diskSwift 从数据(字节数组)创建 URL 对象而不写入磁盘
【发布时间】:2019-02-12 01:24:54
【问题描述】:

如何在不将字节写入磁盘的情况下从 Data(字节数组)创建 Swift URL 对象?

背景:

我需要使用文件查看器(例如 QuickLook)在我的 iOS (Swift) 应用程序中查看安全文件,但我不想将文件写入磁盘。我知道 Apple 会进行磁盘加密,但这不是我们的选择。有什么方法可以将文件查看器(例如 QuickLook)用于纯粹在内存中的文件?

【问题讨论】:

  • 你试过数据URL吗?
  • 使用位于应用临时目录的文件 url 有什么问题?
  • 您不能将 URL 指向内存。您只能让 URL 指向本地或远程文件资源。
  • @LeoDabus 我们不希望用户能够获取这些文件并将它们带到应用程序之外。我相信如果我们使用应用程序临时目录是可能的。

标签: ios arrays swift url quicklook


【解决方案1】:

有一种使用 URI 方案的方法 (data:MIME;base64):
(此代码示例中没有安全性,强制解包等)。

let data = //... get image data
let base64String = data!.base64EncodedString()

let imgURIPath = "data:application/octet-stream;base64,\(base64String)"

// More clear with format?
//let imgURIPath = String(format: "data:application/octet-stream;base64,%@", base64String)


// We need a dummy base URL since URL(string:) is validating the URL
// and will return nil if there's no valid base
let baseURL = URL(string: "https://www.dummyURL.com")!

let uri = URL(string: imgURIPath, relativeTo: baseURL)!

// Test
let imageFromURI = try? UIImage(contentsOf: uri)

【讨论】:

  • 这个解决方案对我有用。
【解决方案2】:

如果你的文档是PDF,你可以直接从Data初始化一个PDFDocument并在PDFView中显示,但我不能保证PDFDocument最终不会将数据写入磁盘暂时地。但是,我认为不写入磁盘就无法获得URL

【讨论】:

  • 这是一个很好的 PDF 解决方案,但理想情况下我们希望能够处理所有基本文件类型(office 文档、文本、图像、mac office)。这就是我们最初研究 QuickLook 的原因
【解决方案3】:

标准的 iOS Quick Look 无法做到这一点。将您的文件存储在具有 A 级加密的某个临时目录中,如果您不希望它们退出您的应用程序,请使用托管企业应用程序,它可以确保您的数据不会退出托管世界。如果您希望 Quick Look 支持 NSItemProvider,请提交错误。

【讨论】:

    【解决方案4】:

    我们决定采用的解决方案是 UIWebView。我们能够使用这个调用:

    webView.load(data: Data, mimeType: String, textEncodingName: String, baseURL: URL)
    

    在我们应用程序的 UIView 中显示 pdf、docx、xlsx、pptx、pdf、jpeg、png、...。这个调用允许我们直接传入数据,而不必先将其保存到磁盘。

    注意: UIWebView 已弃用,我们尝试使用 WKWebViewKit。它具有相同的方法签名,但我们无法正确显示文件。每次的结果都是一堆乱七八糟的乱七八糟的字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2021-11-20
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多