如何使用 Picasso 使用动态 URL 缓存来自 S3 存储桶的图像?
Posted
技术标签:
【中文标题】如何使用 Picasso 使用动态 URL 缓存来自 S3 存储桶的图像?【英文标题】:How to cache images from S3 bucket with dynamic URL using Picasso? 【发布时间】:2019-11-04 05:34:03 【问题描述】:我正在使用 Picasso 使用动态 URL(预签名 URL)从我的私有 S3 存储桶加载图像。问题是每次我想显示相同的图像时,它都会创建一个新的 URL 并再次下载它,而不是缓存相同的图像并显示它。
有没有办法在使用不同的 URL 时缓存相同的图像?
示例代码:
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.HOUR, +6);
Date date = calendar.getTime();
URL url = s3.generatePresignedUrl(
"my-bucket",
"my-image.jpg,
date
);
String urlString = url.toString();
Picasso.get()
.load(urlString)
.into(imageView);
动态网址示例:
第一次点击后:https://s3.us-east-2.amazonaws.com/my-bucket/my-image.jpg?...&X-Amz-Signature=96dd696fdaf464fa42b2416f6261ba05e17d585578816e854e0a97a2782d177c
第二次点击后:https://s3.us-east-2.amazonaws.com/my-bucket/my-image.jpg?...&X-Amz-Signature=8733d7fc9788759a851cf12fb1d1118584ca1f7cc33dc210b3fea4f762707b82
如您所见,生成的 URL 的第一部分始终相同,唯一改变的是 X-Amz-Signature 之后的部分。
我使用预签名 URL 的唯一原因是为了提高安全性。我想对我的 S3 存储桶进行私有访问,以避免从未知来源等强制下载。
【问题讨论】:
你有机会读到这个吗? ***.com/a/23281195/2684(不是我同意这一点,但是……我不喜欢毕加索)。人们可以随心所欲地说,我使用毕加索(很多)的每个项目,当你想做更多事情时总是不太灵活(就像你在这里)。 谢谢你。我还发现 Glide 库可以帮助解决我的问题。我会试试看它是否有效。 我通过使用 Avinash Gupta 的这个类,设法让它与 Glide 一起工作:***.com/questions/40550729/… 【参考方案1】:为什么不使用 Glide,它会自动处理内存和磁盘的缓存。它真的很好,运行顺利。
你可以去他们的官方LINK了解更多。
【讨论】:
以上是关于如何使用 Picasso 使用动态 URL 缓存来自 S3 存储桶的图像?的主要内容,如果未能解决你的问题,请参考以下文章
将图像 url 设置为 listadapter 以使用 Picasso 显示图像