Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Firebase下载pdf并将其本地存储在iOS上_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

从Firebase下载pdf并将其本地存储在iOS上

从Firebase下载pdf并将其本地存储在iOS上,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我需要从存储器下载一份pdf文件,并将其保存在本地的iOS设备上,以便可以在文件中看到它 以下代码取自我正在使用的文档: override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. let userID = Auth.auth().currentUser!.uid print(userID)

我需要从存储器下载一份pdf文件,并将其保存在本地的iOS设备上,以便可以在文件中看到它

以下代码取自我正在使用的文档:

override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        let userID = Auth.auth().currentUser!.uid
        print(userID)

        // Get a reference to the storage service using the default Firebase App
        let storage = Storage.storage()

        // Create a storage reference from our storage service
        let storageRef = storage.reference()

        // Create a reference to the file you want to download
        let islandRef = storageRef.child("pdf/sample.pdf")

        // Create local filesystem URL
        let localURL = URL(string: "pdf/sample.pdf")!

        // Download to the local filesystem
        let downloadTask = islandRef.write(toFile: localURL) { url, error in
            if let error = error {
                // Uh-oh, an error occurred!
            } else {
                // Local file URL for "images/island.jpg" is returned
            }
        }

    }
当我尝试运行此ViewController时,它不会崩溃,但会抛出以下错误:

“无法打开文件,因为不支持指定的URL类型。”UserInfo={NSURL=pdf/sample.pdf}


Firebase存储中的文件保存在名为
pdf/sample.pdf
的文件夹中。最后,我希望从存储器中获取引用,并将其传递到
RealtimeDatabase
,以便用户可以通过在表视图中查看有关它的详细信息来下载它

打开文件时,应该使用
URL(string:string)
而不是
URL(fileURLWithPath:string)

我认为需要做的是指定要将下载的文档保存到本地文件系统的路径。假设您想使用临时文件夹保存您的
pdf
。您可以尝试以下操作:

let tmporaryDirectoryURL = FileManager.default.temporaryDirectory
let localURL = tmporaryDirectoryURL.appendingPathComponent("sample.pdf")

islandRef.write(toFile: localURL) { url, error in
    if let error = error {
       print("\(error.localizedDescription)")
    } else {
       self.presentActivityViewController(withUrl: url)
    }
 }
下载文件后,为了将其保存在文件应用程序中,您需要使用
UIActivityViewController

func presentActivityViewController(withUrl url: URL) {
    DispatchQueue.main.async {
      let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil)
      activityViewController.popoverPresentationController?.sourceView = self.view
      self.present(activityViewController, animated: true, completion: nil)
    }
}

我还没有测试它,但我的假设是,您出现此错误是因为您的
localURL
变量不是文件系统URL。

我需要添加任何其他内容来启动下载吗?您尝试过吗?我不熟悉Firebase API,但URL肯定是个问题。是的,我熟悉。它不会记录错误,但不会启动下载。下面是我所做的更改
let localURL=URL(fileURLWithPath:“pdf/sample.pdf”)
@marosoaie是正确的,但我认为如果它仍然不起作用,那么可能是您必须在.plist文件中添加
NSAppTransportSecurity
。如果您选中此项,那么您的问题可能会得到解决。@Emon我在info.plist文件中做了以下更改,我添加了这段代码
NSAppTransportSecurity nsallowsrabiryloads
。不幸的是,它不起作用。您仍然面临相同的错误?@Emon没有错误,但该文件不会下载。现在检查您的url,它是否是您期望的url?出现以下错误:
无法将“url”类型的值转换为预期的参数类型“String”
抱歉。我更新了我的答案以直接使用url,而不是再次重新创建。进行了更改,没有错误。但是下载过程没有启动。好的。我又做了一次编辑。添加
downloadTask.resume()
。正在进入完成块?完成块在必须打印URL时抛出错误,下面是错误
load failed with error error Domain=NSURLErrorDomain code=-999“cancelled”UserInfo={NSErrorFailingURLStringKey=https://firebasestorage.googleapis.com/v0/b/project-6a073.appspot.com/o/pdf%2Fsample.pdf?alt=media,n错误失败键=https://firebasestorage.googleapis.com/v0/b/nameoftheproject-6a073.appspot.com/o/pdf%2Fsample.pdf?alt=media,_nsurlerorelatedurlSessionTaskErrorKey=(“本地下载任务”)
我已尝试缩短错误,将其添加到此处。