【发布时间】: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 存储桶进行私有访问,以避免从未知来源等强制下载。
【问题讨论】:
-
你有机会读到这个吗? stackoverflow.com/a/23281195/2684(不是我同意这一点,但是……我不喜欢毕加索)。人们可以随心所欲地说,我使用毕加索(很多)的每个项目,当你想做更多事情时总是不太灵活(就像你在这里)。
-
谢谢你。我还发现 Glide 库可以帮助解决我的问题。我会试试看它是否有效。
-
我通过使用 Avinash Gupta 的这个类,设法让它与 Glide 一起工作:stackoverflow.com/questions/40550729/…
标签: java android amazon-s3 picasso okhttp