【问题标题】:Swift : My files in Firebase Storage wouldn't be deletedSwift:我在 Firebase 存储中的文件不会被删除
【发布时间】:2018-12-04 09:47:36
【问题描述】:

我有一个应用程序允许用户在 firebase 存储上保存一些图片。

我正在尝试允许用户从应用程序中删除这些文件,并从存储中删除它。

我的代码:

if let user = Auth.auth().currentUser{

                // user is connect

                let storRef = Storage.storage().reference()
                let userID = Auth.auth().currentUser?.uid


                storRef.child("Planes").child(userID!).child(dataME[indexPath.row].image).delete(completion: nil)

                self.tableView.reloadData()

                dataME.remove(at: indexPath.row)

            }else{

                fatalError("⛔️ error ...")
            }

现在,在这种情况下,我的 tableView 中的行已完全删除,而我的代码的其他部分也删除了数据库引用,但存储不会删除图片...为什么?

非常感谢您的帮助

【问题讨论】:

    标签: swift firebase firebase-storage


    【解决方案1】:

    检查删除存储时是否出错

    let storageRef = Storage.storage().reference().child("Planes").child(userID!).child(dataME[indexPath.row].image)
        storageRef.delete { (error) in
            if error != nil{
                print(error)
                return
            }
            // else proceed
    
        }
    

    【讨论】:

    • 出现这个错误:` "error": { "code": 404, "message": "Not Found. could not delete object" }`
    • 这意味着您的文件不存在。上传图片时是否将文件路径保存在数据库中?还要检查我们在删除图像时是否指向正确的存储引用。
    • 我已经将 URL 添加到数据库中,我从数据库中调用它来删除文件。我将尝试添加一个断点来查看此时 storRef 中的值。
    • 好的。使用断点检查。如果可能,还请分享您的存储屏幕截图
    • 可能是一个原因:NSURLConnection finished with error - code -1002我会尽量给你截图,断点提供任何信息......我也会发送截图
    【解决方案2】:

    您不应该按图片搜索。 而是尝试使用 firebase 提供的下载 URL

    您可以通过单击存储从 Firebase 仪表板获取 URL,而不是单击当前图像,在那里您可以看到下载图像。

    当您上传图片时,它会返回带有 URL 的回调,您必须将 URL 保存在数据结构中

    上传图片示例:

    func uploadImagePic(img1 :UIImage){
            var data = NSData()
            data = UIImageJPEGRepresentation(img1!, 0.8)! as NSData
            // set upload path
            let filePath = "\(userid)" // path where you wanted to store img in storage
            let metaData = FIRStorageMetadata()
            metaData.contentType = "image/jpg"
    
            self.storageRef = FIRStorage.storage().reference()
            self.storageRef.child(filePath).put(data as Data, metadata: metaData){(metaData,error) in
                if let error = error {
                    print(error.localizedDescription)
                    return
                }else{
                    //store downloadURL
                    let downloadURL = metaData!.downloadURL()!.absoluteString
                    data[index].downloadURL = downloadURL
                }
            }
    
        }
    
        // delete example
        let storage = Storage.storage()
        let url = data[index].downloadURL
        let storageRef = storage.reference(forURL: url)
    
            storageRef.delete { error in
                if let error = error {
                    print(error)
                } else {
                    // File deleted successfully
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2017-03-24
      相关资源
      最近更新 更多