如何将图片网址添加到 firestore

问题描述 投票:0回答:0

我正在尝试将我的用户图像 url 从 firebase 存储添加到 firestore,但我的 firestore 没有更新新的用户数据,我收到了这个错误

来自上传任务 错误域=FIRStorageErrorDomain 代码=-13010“对象 NewPic 不存在。” UserInfo={object=NewPic, ResponseBody={ “错误”: { “代码”:404, “消息”:“未找到。”

我可以将我的图像上传并查看到 firebase 存储,但 firestore 中没有数据。为什么我会收到此错误以及如何修复此代码以将我的用户图像 url 上传到 firestore

VStack {
    PhotosPicker("Select avatar", selection: $avatarItem, matching: .images)
    //....
    if let img = avatarImage {
        Image(uiImage: img) 
            .resizable()
            .scaledToFit()
            .frame(width: 300, height: 300)
    }
}
.onChange(of: avatarItem) { _ in
    Task {
        if let data = try? await avatarItem?.loadTransferable(type: Data.self) {
            if let uiImage = UIImage(data: data) {
                avatarImage = uiImage
            }


func AddFirebase() {            
    var dict : Dictionary < String, Any> = [:]

         let imageName = "NewPic"
         let storageRef = Storage.storage().reference()
         let imageReference = storageRef.child(imageName)
         let imageData: Data? = avatarImage?.jpegData(compressionQuality: 0.8)
    
    guard imageData != nil else {
        let er = "THIS: Error while converting to data"
        return print(er)
    }
    
    let path = "images/\(UUID().uuidString).jpg"
    let fileRef = storageRef.child(path)
    
    let uploadTask = fileRef.putData(imageData!, metadata: nil) {metaData, error in
        print("THIS: from uploadTAsk")
        
        if error == nil && metaData != nil {
            imageReference.downloadURL { (url, error) in
                if let err = error {
                    print(err);                        return
                }
                
                guard let validUrl = url else {
                    print("url was not valid")
                    return
                }
                let urlString = validUrl.absoluteString
                dict["ProfileImageUrl"] = urlString
                
                let db = Firestore.firestore()
                db.collection("user").document("username").setData(["username" : name, "bio": profileText, "profileImage" : imageName ])
                
                return
            }
ios firebase google-cloud-firestore swiftui
© www.soinside.com 2019 - 2024. All rights reserved.