获取"用户无权访问gs://xxxx.appspot.com/(null)"
升级Firebase(Firebase 5.1.0(原为4.11.0),FirebaseStorage 3.0.0(原为2.1.3))后再制作代码:
这是升级前的工作代码:
imageUploadTask.observe(.success) { snapshot in
let downloadURL = snapshot.metadata!.downloadURL()!.description
addPostData(userId: userId, downloadURL: downloadURL)
}
升级后的代码,因为对于StorageMetaData现在不推荐使用downloadURL:
imageUploadTask.observe(.success) { snapshot in
storageRef.downloadURL { (url, error) in
guard let downloadURL = url else { return }
addPostData(userId: userId, downloadURL: downloadURL.description)
}
在完成块中打印错误返回: "用户无权访问gs://xxxx.appspot.com/(null)"
我尝试过:(1)检查用户是否经过身份验证(Auth.auth()。currentUser不是nil); (2)从snapshot.metadata.storageReference获取storageRef没有解决此问题。
我希望继续仅允许经过身份验证的用户上传图片,并且不希望更改Firebase存储规则。
有什么想法吗?
答案 0 :(得分:0)
我遇到了同样的问题,解决方案(在重新检查guide doc中的代码示例之后)是使用代表图像文件的 Child 对象调用downloadURL
方法。看下面的代码:
// Upload the image
let imagesFolder = Storage.storage().reference().child("images")
let imageFileName = NSUUID().uuidString + ".jpg"
let imageFileObject = imagesFolder.child(imageFileName)
imageUploadTask.observe(.success) { snapshot in
imageFileObject.downloadURL(completion: { (url, error) in
if error != nil {
print(error!.localizedDescription)
return
}
guard let downloadURL = url else { return }
print("Url: \(downloadURL)")
addPostData(userId: userId, downloadURL: downloadURL.description)
})
}