如何使用毕加索从带有动态URL的S3存储桶中缓存图像?

时间:2019-06-21 11:04:23

标签: java android amazon-s3 picasso okhttp

我正在使用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);

动态URL示例:

第一次点击后: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存储桶上拥有私人访问权限,以避免从未知来源等处强制下载。

1 个答案:

答案 0 :(得分:0)

为什么不使用Glide,它将自动处理内存和磁盘的缓存。真的很棒,而且运行顺利。

您可以去他们的官方LINK了解更多信息。