Firebase存储未覆盖图像

agxfikkp  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(123)

我试着用swift把个人资料图片上传到我的firebase存储器,问题是当用户上传一张新的个人资料图片时,它不会覆盖第一张,在我的应用程序上,它仍然显示旧的图片,尽管在数据库上,它显示新的图片已经上传。
这就是我加载图像的方式

let storage = Storage.storage()
let storageRef = storage.reference()

let ref = storageRef.child("\(UserModel.docId)-ProfilePicture")

// check if file exists or not
ref.downloadURL { newUrl, error in
    if let error = error {
        print("Image does not exist")
        self.profileImage.image = UIImage(systemName: "person.circle.fill")
    } else {
        print("loaded database image")
        self.profileImage.sd_setImage(with: ref)
    }
}

这是我上传图像的方式。

let storage = Storage.storage()
let storageRef = storage.reference()
let photoRef = storageRef.child("\(UserModel.docId)-ProfilePicture")
let data = Data()

let uploadTask = photoRef.putFile(from: fileURL,metadata: nil) {(metadata,err)  in
    guard let metadata = metadata else {
        print("error uploading to database")
        return
    }
    print("Photo uploaded")
}

没有错误。

ocebsuys

ocebsuys1#

我将使用以下UIImage方法将UIImage转换为Data

public func jpegData(compressionQuality: CGFloat) -> Data?

您可以直接在映像上调用该函数以获取Data,然后您可以使用该函数上传到存储。

// handy extension
extension StorageMetadata {
    enum MetadataContentType: String {
        case jpeg = "image/jpeg"
    }
    
    convenience init(contentType: MetadataContentType) {
        self.init()
        self.contentType = contentType.rawValue
    }
}

let storage = Storage.storage()
let remotePath = "\(UserModel.docId)-ProfilePicture"
let metadata = StorageMetadata(contentType: .jpeg)

storage.reference(withPath: remotePath).putData(theJPEGData, metadata: metadata) { (metadata, error) in
    if let _ = metadata {
        // success
    } else {
        if let error = error {
            print(error)
        }
        // failure
    }
}

相关问题