【问题标题】:How to get the source of the files from UIDocumentMenuViewController or UIDocumentPickerViewController?如何从 UIDocumentMenuViewController 或 UIDocumentPickerViewController 获取文件的来源?
【发布时间】:2018-05-31 10:29:36
【问题描述】:

我已经成功实现了一项功能,让用户可以通过UIDocumentMenuViewControllerUIDocumentPickerViewController 为我的应用选择文件。

但我不知道如何检测文件的来源。有 FilesGoogle DriveDropBox 等来源。

func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController)
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL)

我已经完成了所有委托功能,但没有看到任何方法。任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift uidocumentpickerviewcontroller uidocumentmenuviewcontroller


    【解决方案1】:

    你好卡尔文,

    请添加代表UIDocumentMenuDelegate,UIDocumentPickerDelegate

        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
                let docurl = url as URL
                print("The Url is : \(docurl)")
                let urlRequest = NSURLRequest(url: docurl)
                do {
                    let fileAttributes = try FileManager.default.attributesOfItem(atPath: url.path)
                        let theData = try NSURLConnection.sendSynchronousRequest(urlRequest as URLRequest, returning: nil)
                        let fileExtension = urlRequest.url?.lastPathComponent
                        var strFileNAME = ""
                        if (fileExtension?.contains("pdf"))! {
                            print("pdf")
                        } else {
                            print("doc")
                        } 
                        var docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last as NSURL?
                        docURL = docURL?.appendingPathComponent("\(String(describing: fileExtension))") as NSURL?
                        try theData.write(to: docURL! as URL)
                        self.DocumentData = theData
                        print("downloaded")
                    }
                } catch (let writeError) {
                    print("error : \(writeError)")
                }
                let docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last)
                do {
                    let contents = try (FileManager.default.contentsOfDirectory(at: docURL!, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles))
                    print(contents)
                }
                catch (let error) {
                    print("error contents \(error)")
                }
            }
    
            public func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
                documentPicker.delegate = self
                present(documentPicker, animated: true, completion: nil)
            }
    
            func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
                dismiss(animated: true, completion: nil)
            }
    

    【讨论】:

      【解决方案2】:

      出于隐私原因,这是不可能的。您应该无法分辨用户安装了哪些云供应商。

      另外,请不要使用已弃用的UIDocumentMenuViewController

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多