use*_*705 5 ios sdwebimage firebase swift firebase-storage
我在应用程序上安装了可与Firebase UI配合使用的图像,以便可以通过遵循文档https://firebase.google.com/docs/storage/ios/download-files轻松缓存它们
我的代码看起来像这样
guard let profileImageUrl = user?.url else { return }
profileImageView.sd_setImage(with: profileImageUrl)
Run Code Online (Sandbox Code Playgroud)
我正在覆盖图像位置以更新图像
let storageRef = Storage.storage().reference(withPath: "/users/\(uid)/profilePhoto.jpg")
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, err) in
Run Code Online (Sandbox Code Playgroud)
如果我在没有缓存的新设备上浏览照片,它将显示新图像。但是,如果我在以前查看过的设备上转到该图像,则只能看到旧图像。
编辑:所以我知道缓存通过SDWebImage工作。我正在基于用户uid生成与SDWebImage一起使用的存储引用。因此,存储参考未更改,这引起了问题。
当您使用 SDWebImage 加载图像时,它会永久缓存该图像,并且下次不会从网络请求该图像。当您从其他设备上传新图像时,图像的 url 保持不变,即先前设备上的 SDWebImage 不知道图像已更新。因此,您需要想出一个关于如何通知以前的设备有关更改的想法。
以下是我认为应该如何完成的:
上传图像时使用动态图片名称。这样 url 就会发生变化,SDWebImage 将加载新的个人资料图片。
在评论中,您问我如何引用这个动态网址。你有两种可能的选择(我能想到的):
1)使用firebase数据库:在这里我们将在数据库上创建一个节点/引用,例如用户/uid。在这里,我们将存储带有关键图像的动态 imageurl。在任何设备上,当您想要在设备上加载图像时,您将从数据库中读取 url。它总是指向新的图像 url 一个关于如何做到这一点的很好的例子在这个SO POST上
Breif:用户->上传图像->将URL保存到数据库
从 Firebase 读取图片 Url -> 通过 SDWebImage UIImageView 加载它
2) 使用文本文件:在这里我们不会使用数据库。我们将在同一文件夹 users/uid/log.txt 文件下创建一个日志文件。每当您将图像上传到存储时,我们都会将 URL 保存在此文本文件中并将其上传到存储中。当您想要加载图像时,首先读取文本文件以获取 imageUrl,然后使用 SDWebImage 加载图像。这种方式与上传和下载图像文件非常相似,但有一个额外的步骤,您必须读取文本文件才能获取存储空间。
简介:用户->上传图片->将url放入文本文件中并上传
下载文本文件 -> 从文件中读取图像 url -> 通过 SDWebImage 将图像加载到 UIImageVIew
我正在阅读文档并找到了另一种方法。这样你就不需要使用动态 url。您可以使用您的静态网址。在此您需要查询图像的元数据:
// Create reference to the file whose metadata we want to retrieve
let forestRef = Storage.storage().reference(withPath: "/users/\(uid)/profilePhoto.jpg")
// Get metadata properties
forestRef.getMetadata { metadata, error in
if let error = error {
// Uh-oh, an error occurred!
} else {
// Metadata now contains the metadata for 'profilePhoto.jpg'
}
}
Run Code Online (Sandbox Code Playgroud)
文件元数据包含常见属性,例如名称、大小和 contentType(通常称为 MIME 类型),以及一些不太常见的属性(例如 contentDisposition 和 timeCreated)。
每当您查询元数据时,请将 timeCreated 保存在 UserDefaults 中,下次将 timeCreated 与保存的 timeCreated 进行比较,如果存在差异,则从 SDWebImage 缓存中删除图像,然后要求 SDWebImage 再次加载图像。
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |