【问题标题】:Can't download images from Firebase Database by link or path无法通过链接或路径从 Firebase 数据库下载图片
【发布时间】:2020-08-06 19:21:06
【问题描述】:

大家好,我无法通过链接或路径从我的数据库中下载图像。所有链接都是正确的,它们在应用程序中也是正确的。调试器中没有任何错误,我的代码看起来像文档示例。 我无法解决这个问题 2 天,我的朋友或来自 swift 聊天的人中没有人能帮助我。 http 链接示例:...firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F26.png?alt=media&token...

let urlText = modelArray[indexPath.row].imageURL
    print(urlText) //here is a print
    let ref = Storage.storage().reference(forURL: urlText)
    let megabyte = Int64(1 * 1024 * 1024)
    ref.getData(maxSize: megabyte) { data, error in
        guard let imageData = data else { return } //1st breakpoint
        let image = UIImage(data: imageData) //2nd break
        cell.itemImageView.image = image!

imageUrl 是通过复制粘贴从 FirebaseStorage 获得的。此链接打印正确。我设置了 2 个断点来解决问题,这就是我从 lldb 得到的: (lldb) expr error (Error?) $R2 = domain: "FIRStorageErrorDomain" - code: 18446744073709538595 { _userInfo = 0x000060000078e2c0 }

(lldb) expr data (Data?) $R0 = nil - 数据为零!我在互联网上找不到此错误的解决方案。 按路径下载图像也不起作用。问题是一样的。数据库中的所有其他内容都很好。

所有印刷品:

https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F26.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F6.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F1.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F26.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F6.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F1.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F14.png?alt=media&token=xxxx https://firebasestorage.googleapis.com/v0/b/pfood-5b1eb.appspot.com/o/menu%2F30.png?alt=media&token=xxxx 2020-08-08 00:04:00.356154+0300 pFood[24374:1517416] 6.19.0 - [Firebase/Analytics][I-ACS031025] Analytics screen reporting is enabled. Call +[FIRAnalytics setScreenName:setScreenClass:] to set the screen name or override the default screen class name. To disable screen reporting, set the flag FirebaseScreenReportingEnabled to NO (boolean) in the Info.plist 2020-08-08 00:04:00.650564+0300 pFood[24374:1517416] 6.19.0 - [Firebase/Analytics][I-ACS023007] Analytics v.60301000 started 2020-08-08 00:04:00.861852+0300 pFood[24374:1517416] 6.19.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see xxxx) 2020-08-08 00:04:01.149822+0300 pFood[24374:1517416] 6.19.0 - [Firebase/Analytics][I-ACS800023] No pending snapshot to activate. SDK name: app_measurement 2020-08-08 00:04:02.406372+0300 pFood[24374:1517487] 6.19.0 - [Firebase/Analytics][I-ACS800003] Registered an SDK that has already registered. Default flags will be overwritten. SDK name: app_measurement 2020-08-08 00:04:02.511475+0300 pFood[24374:1517497] 6.19.0 - [Firebase/Analytics][I-ACS800023] No pending snapshot to activate. SDK name: app_measurement 2020-08-08 00:04:10.454503+0300 pFood[24374:1517594] 6.19.0 - [Firebase/Analytics][I-ACS023012] Analytics collection enabled

我尝试了 @Jay 的代码,我的控制台看起来像 gs://pfood-5b1eb.appspot.com/menu/1.png. User does not have permission to access 这是一个火力基础问题,我们将与团队一起修复它。

对不起,我的英语不好。这是我的第一个案例。我积极检查 cmets 和答案。感谢您的任何反馈。

【问题讨论】:

  • 嗨,埃米尔,欢迎您!首先,您应该通过文本而不是图像来共享您的代码。除此之外,我的疯狂猜测是该参考文献消失了,因为它是本地参考文献。那么,现在是否正在调用完成块?
  • “我不能”有点不清楚。如果在回调guard let imageData = data else { return } 的第一行设置断点,它会到达那个点吗?如果有,是否有error?如果没有,有没有data
  • @FrankvanPuffelen 这是一个 lldb 对话 (lldb) expr data (Data?) $R0 = nil 和错误内容 (lldb) expr error (Error?) $R2 = domain: "FIRStorageErrorDomain" - code: 18446744073709538595 { _userInfo = 0x000060000078e2c0 }
  • 问题中确实没有足够的信息。首先,您应该添加一个打印语句,以便您可以检查 imageURL 以确保它是正确的。 url 是从downloadUrlWithCompletion 获得的吗?它是以http: 还是gs: 开头的?如果没有,您可能需要使用reference(withPath:。更新问题,我们来看看。
  • @Jay 完成编辑感谢您的反馈

标签: swift firebase firebase-storage


【解决方案1】:

这不是一个直接的答案,但可能会导致一个。

故障排除的一部分是在错误发生时捕获从服务器返回的错误,并将该信息提供给您(开发人员)或最终用户。

问题中的代码完全忽略了从服务器返回的任何错误,所以如果有错误,我们不知道它是什么。

尝试更改代码以捕获和处理错误 - 这将为您提供有关当前问题的更多信息:

let urlText = modelArray[indexPath.row].imageURL
let ref = Storage.storage().reference(forURL: urlText)
let megabyte = Int64(1 * 1024 * 1024)
ref.getData(maxSize: megabyte) { maybeData, maybeError in
    if let err = maybeError {
        print(err.localizedDescription)
        return
    }
    
    guard let imageData = maybeData else {
        print("data was nil, file not found")
        return
    }
    
    if let image = UIImage(data: imageData) {
        cell.itemImageView.image = image
    } else {
        print("imageData was not valid")
    }
}

这看起来像是身份验证或规则问题,因此请根据我的代码更改在有更多信息可用时更新问题。

【讨论】:

  • 它帮助我们理解了问题。它在 Firebase 本身中。
【解决方案2】:

问题真的不在于代码。我们只需要在 Firebase 存储中切换权限访问。这是一个愚蠢的问题哈哈。感谢您的反馈!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2020-10-15
    • 1970-01-01
    • 2019-10-02
    • 2018-06-26
    相关资源
    最近更新 更多