用户无权访问 gs:// xxx.appspot.com
user does not have permission to access gs:// xxx.appspot.com
在此应用程序中,我使用 firebase 创建了身份验证和数据库。但是在我的 post 中,它由标题、内容和图像组成,我只看到我的默认图像。我在数据库中存储时遇到了一些问题,首先将图像上传到 firebase 存储然后获取它的 url.
import Foundation
import SwiftUI
import Firebase
import FirebaseStorage
class StorageStore: ObservableObject {
let storageRef = Storage.storage().reference()
func uploadImage(_ image: UIImage, completion: @escaping (URL?) -> Void) {
let imageRef = storageRef.child("images/"+timeString()+".jpg")
guard let imageData = image.jpegData(compressionQuality: 0.1) else {
return completion(nil)
}
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
imageRef.putData(imageData, metadata: metadata, completion: { [self] (metadata, error) in
if let error = error {
assertionFailure(error.localizedDescription) //
//Thread 1: Fatal error: User does not have permission to access gs://ios-post-193ec.appspot.com/images/2022-03-29T10:03:18Z.jpg.
return completion(nil)
}
imageRef.downloadURL(completion: { (url, error) in
if let error = error {
assertionFailure(error.localizedDescription)
return completion(nil)
}
completion(url)
})
})
}
func timeString() -> String {
let now = Date()
let formatter = ISO8601DateFormatter()
let datetime = formatter.string(from: now)
print(datetime)
return datetime
}
}
因此,我无法将图片上传到存储空间
在这种情况下,我有一个错误(),如上所示。而不是默认图像,模拟器中的 6 个永久图像之一必须出来。
错误信息显示用户没有访问该文件的权限。所以看起来你有 security rules 控制谁可以通过 Firebase 访问你的云存储中的文件,并且这些规则拒绝这个读取操作。我建议查看我链接的文档(那里还有一个旧的但仍然很棒的视频)以了解如何允许操作,同时仍然保持文件安全。
在此应用程序中,我使用 firebase 创建了身份验证和数据库。但是在我的 post 中,它由标题、内容和图像组成,我只看到我的默认图像。我在数据库中存储时遇到了一些问题,首先将图像上传到 firebase 存储然后获取它的 url.
import Foundation
import SwiftUI
import Firebase
import FirebaseStorage
class StorageStore: ObservableObject {
let storageRef = Storage.storage().reference()
func uploadImage(_ image: UIImage, completion: @escaping (URL?) -> Void) {
let imageRef = storageRef.child("images/"+timeString()+".jpg")
guard let imageData = image.jpegData(compressionQuality: 0.1) else {
return completion(nil)
}
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
imageRef.putData(imageData, metadata: metadata, completion: { [self] (metadata, error) in
if let error = error {
assertionFailure(error.localizedDescription) //
//Thread 1: Fatal error: User does not have permission to access gs://ios-post-193ec.appspot.com/images/2022-03-29T10:03:18Z.jpg.
return completion(nil)
}
imageRef.downloadURL(completion: { (url, error) in
if let error = error {
assertionFailure(error.localizedDescription)
return completion(nil)
}
completion(url)
})
})
}
func timeString() -> String {
let now = Date()
let formatter = ISO8601DateFormatter()
let datetime = formatter.string(from: now)
print(datetime)
return datetime
}
}
因此,我无法将图片上传到存储空间
在这种情况下,我有一个错误(),如上所示。而不是默认图像,模拟器中的 6 个永久图像之一必须出来。
错误信息显示用户没有访问该文件的权限。所以看起来你有 security rules 控制谁可以通过 Firebase 访问你的云存储中的文件,并且这些规则拒绝这个读取操作。我建议查看我链接的文档(那里还有一个旧的但仍然很棒的视频)以了解如何允许操作,同时仍然保持文件安全。