我想从Google云端硬盘中选择文件和One驱动器云服务,我正在使用UIDocumentPickerViewController
例如:
func didPressOneDriveChoose() {
let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.show(importMenu, sender: nil)
}
委托方法的recled callBack:
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]){
var arrFiles = [Dictionary<String, AnyObject>]()
for url in urls {
// returns local document directory URL
// needs original GoogleDrive or OneDrive URL
}
}
但我想知道有没有办法让用户选择哪种云服务,我还想要指向该网址的原始网址?目前,它在点击下载该文件后返回本地文档目录URL。
答案 0 :(得分:2)
您初始化为:
let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .import)
如果您read the documentation使用此特定选择器模式.import
,则说明:
URL指的是所选文档的副本。这些文件是临时文件。它们仅在您的应用程序终止之前保持可用。要保留永久副本,请将这些文件移动到沙箱中的永久位置。
.open
似乎更适合您的用例。
URL指的是所选文档。提供的URL是 安全范围,指的是应用程序沙箱外的文件。对于 有关使用外部安全范围URL的更多信息,请参阅 要求。
但是,由于您只是观察网址以识别服务而不是实际尝试手动访问这些文档,因此您不必担心违反任何要求。因此,将UIDocumentPickerViewController
初始化更改为:
let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .open)
它应该有效!
答案 1 :(得分:1)
出于隐私原因,您将无法了解云服务(除非您开始从URL推断它...糟糕的主意)。但是,如果您使用open
模式而不是import
模式(in: .open
),则可以从原始位置获取文件,而不是副本。警告,如果您使用open
模式,则会开始打开文档,因此您需要适当地使用文件协调。