Firebase 存储不覆盖图像

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

我正在尝试使用 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")
}

没有错误。

swift firebase google-cloud-firestore storage
2个回答
0
投票

我要做的是使用以下

UIImage
方法将
Data
转换为
UIImage

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
    }
}

0
投票

解决方案是在下载文件之前清除缓存,如下所示:

SDImageCache.shared.clearDisk()
© www.soinside.com 2019 - 2024. All rights reserved.