Firebase存储下载到本地文件错误

2 ios firebase swift firebase-storage

我正在尝试f5bd8360.jpeg从Firebase存储中下载图像.
当我使用这个图像下载到内存时dataWithMaxSize:completion,我可以下载它.

当我尝试使用writeToFile:实例方法将图像下载到本地文件时出现问题.

我收到以下错误:

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown
error occurred, please check the server response."
UserInfo={object=images/f5bd8360.jpeg,
bucket=fir-test-3d9a6.appspot.com, NSLocalizedDescription=An unknown
error occurred, please check the server response.,
ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/Documents/images,
NSUnderlyingError=0x1700562c0 {Error Domain=NSPOSIXErrorDomain Code=1
"Operation not permitted"}, ResponseErrorCode=513}"
Run Code Online (Sandbox Code Playgroud)

这是我的Swift代码的片段:

@IBAction func buttonClicked(_ sender: UIButton) {

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

        // Get reference to the image on Firebase Storage
        let imageRef = storage.reference(forURL: "gs://fir-test-3d9a6.appspot.com/images/f5bd8360.jpeg")

        // Create local filesystem URL
        let localURL: URL! = URL(string: "file:///Documents/images/f5bd8360.jpeg")

        // Download to the local filesystem
        let downloadTask = imageRef.write(toFile: localURL) { (URL, error) -> Void in
            if (error != nil) {
                print("Uh-oh, an error occurred!")
                print(error)
            } else {
                print("Local file URL is returned")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我发现另一个问题我得到了同样的错误,但它从未完全回答过.我认为这个提案是正确的.我没有权限写入文件.但是,我不知道如何获得权限.有任何想法吗?

Ruf*_*rza 9

问题是,在你写这一行的那一刻:

let downloadTask = imageRef.write(toFile: localURL) { (URL, error) -> Void in
etc.
Run Code Online (Sandbox Code Playgroud)

您还没有权限写入该(localURL)位置.要获得权限,您需要在尝试编写任何内容之前编写以下代码localURL

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let localURL = documentsURL.appendingPathComponent("filename")
Run Code Online (Sandbox Code Playgroud)

通过这样做,您将把文件写入设备上的以下路径(如果您在真实设备上进行测试):file:///var/mobile/Containers/Data/Application/XXXXXXXetc.etc./Documents/filename

如果您在模拟器上进行测试,路径显然会在计算机上的某个位置.