(Swift) 如何获取 documentPicker URL 的数据表示

Posted

技术标签:

【中文标题】(Swift) 如何获取 documentPicker URL 的数据表示【英文标题】:(Swift) How can I get a Data representation of the documentPicker URL 【发布时间】:2018-03-25 19:35:31 【问题描述】:

我使用 didPickDocumentAt 函数来检索 DocumentPickerViewController 中选取的文件的 url。我有一个使用 alamofire 将文件上传到后端的分段上传功能。

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) 
    print(url)
    uploadMultipartFile()

我的问题是:如何获取我选择的文件的数据表示,以便将其传递给我的 uploadMultipartFile 函数?

文件可以是 pdf、.docx 或任何类型的文件。方法是什么?

【问题讨论】:

只需使用Data(contentsOf: URL) 方法和/或移动/复制您的文件网址 【参考方案1】:

看看dataWithContentsOfURL:

返回一个数据对象,其中包含来自给定 URL 指定位置的数据。

注意throws,如果它不能从 URL 创建数据表示。

所以在你的情况下可能是这样的:

func documentPicker(_ controller: UIDocumentPickerViewController, 
      didPickDocumentsAt urls: [URL]) 
print(url)
    do 
        var documentData = [Data]()
        for url in urls 
            documentData.append(try Data(contentsOf: url))
        

        //hopefully you have an array of data elements now :)                
        uploadMultipartFile()
     catch 
        print("no data")
    

希望对您有所帮助。

【讨论】:

url 不是可选的,并且不推荐使用单 url 方法。你应该使用documentPicker(_:didPickDocumentsAt:)developer.apple.com/documentation/uikit/… @LeoDabus 对不起,你是对的(这是在我的操场示例中,这就是为什么 :))谢谢你的捕获,我现在已经修好了。 谢谢你,但还有一个问题,我记得我读过有关文件被沙盒化的信息,并且需要做更多的工作才能访问它们。这仍然是真的吗? 我实际上不确定是否诚实。我的意思是...您的文件是沙盒的,是的,但这应该允许您访问它们。另外,如果你看这里:developer.apple.com/library/content/documentation/… 有一个关于“访问沙盒外的文件”的部分,所以这似乎也是可能的......只需要一点工作。抱歉,回复含糊不清。

以上是关于(Swift) 如何获取 documentPicker URL 的数据表示的主要内容,如果未能解决你的问题,请参考以下文章

DocumentPicker 为文件获取 NULL

Xamarin iOS DocumentPicker:如何导入大文件?

Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

使用 DocumentPicker SwiftUI 更改状态

UIDocumentPickerViewController 用法

从 icloud 打开文件时,Swift 4 应用程序崩溃