Java 如何使用毕加索使用动态URL缓存S3 bucket中的图像?

Java 如何使用毕加索使用动态URL缓存S3 bucket中的图像?,java,android,amazon-s3,picasso,okhttp,Java,Android,Amazon S3,Picasso,Okhttp,我正在使用毕加索使用动态URL(预先签名的URL)从我的私有S3存储桶加载图像。问题是,每次我想显示相同的图像时,它都会创建一个新的URL并再次下载,而不是缓存相同的图像并显示它 在使用不同的URL时,有没有办法缓存相同的图像 示例代码: Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.HOUR, +6); Date da

我正在使用毕加索使用动态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示例:

    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=8733d7fc9788759a851cf12fb1118584ca1f7cc33dc210b3fea4f762707b82

正如您所看到的,生成的URL的第一部分始终是相同的,唯一更改的是X-Amz-Signature之后的部分


我使用预签名URL的唯一原因是为了更好的安全性。我想对S3存储桶进行私有访问,以避免从未知来源强制下载等。

为什么不使用Glide,它将自动处理内存和磁盘的缓存。这真的很好,工作顺利


你可以去他们的官方网站了解更多信息。

你有机会读过这篇文章吗?(我并不同意这一点,但……我不喜欢毕加索)。人们可以随心所欲地说,我使用毕加索(很多)的每一个项目,当你想做更多的事情(比如你在这里)时,总是不够灵活。谢谢你。我还发现Glide库可以帮助解决我的问题。我将尝试它,看看它是否有效。我使用Avinash Gupta提供的这个类成功地使它与Glide一起工作: