繁体   English   中英

来自base64网址的数据

[英]data from base64 url

我有一个网址,格式为

foo://?data:application/x-foo;base64,OjAyMDAwMDA0MDAwMEZBDQo6MTAwMDA...

现在需要将base64数据提取到Data对象中。

不幸的是,似乎Data对象还不支持此功能

let data = try Data(contentsOf: url)

尝试返回NSURLConnection finished with error - code -1002返回NSURLConnection finished with error - code -1002

尽管我可以手动解码URL,但我想知道是否缺少一种简单的标准方法。 你会怎么做?

实际上,您可以从URL解码Base64数据(例如,参见iOS 7+中的Base64解码,在Objective-C中进行了演示)。 格式与您所拥有的格式有些不同:

let url = URL(string: "data:application/octet-stream;base64,SGVsbG8gd29ybGQh")!
let data = try! Data(contentsOf: url)

print(String(data: data, encoding: .utf8)!) // Hello world!

(为简便起见,省略了错误检查。)

您必须将URL的base64编码部分与其他部分分开,对其进行解码,然后将原始非编码部分与解码部分结合在一起并从那里获取数据。

extension URL {
    init?(partialBase64Url: String){
        guard let base64part = base64Url.components(separatedBy: "base64,").last, let base64Data = Data(base64Encoded: base64part), let decodedString = String(data: base64Data, encoding: .utf8) else {
            return nil
        }
        let decodedUrl = base64Url.components(separatedBy: "base64,").dropLast().joined() + decodedString
        self.init(string: decodedUrl)
    }
}

let decodedUrl = URL(partialBase64Url: "foo://?data:application/x-foo;base64,dGVzdFVybFN0cmluZw==")

的值decodedUrl"foo://?data:application/x-foo;testUrlString"如所预期的,因为dGVzdFVybFN0cmluZw==是的base64编码值testUrlString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM