【问题标题】:How do use use Picasso library while downloading images from Amazon S3?从 Amazon S3 下载图像时如何使用毕加索库?
【发布时间】:2015-09-06 23:06:22
【问题描述】:

我将图像存储在 Amazon S3 上。我使用以下代码从 Amazon S3 下载图像

 S3ObjectInputStream content = s3Client.getObject("bucketname", url).getObjectContent();
                byte[] bytes ;
                bytes = IOUtils.toByteArray(content);
                bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
                bitmap = CommonUtilities.getRoundedCornerBitmap(bitmap, 30);
                cache.put(url, new SoftReference<Bitmap>(bitmap));
                return bitmap;

在浏览毕加索文档时,我读到了加载我们只需要做的图像

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

那么如何通过 Picasso 下载 Amazon S3 图像。

【问题讨论】:

  • 您没有对任何答案投赞成票。您是否认真使用 SO 并帮助他人?我们不知道什么对你有用..

标签: android amazon-web-services amazon-s3 picasso


【解决方案1】:

您可以使用AmazonS3.generatePresignedUrl(String, String, Date) 生成一个预签名的网址并将其传递给毕加索。这是一个例子"Generate a Pre-signed Object URL using AWS SDK for Java"。虽然该示例适用于 Java SDK,但它适用于 AWS Android SDK。

【讨论】:

  • 这方法不错。不知道 AWS SDK 有它。 :)
  • 请注意,每次 Amazon S3 凭证到期(密钥更改)时,预签名 URL 都会更改。所以毕加索将再次从网络而不是从缓存中加载图像。您应该保留您的预签名网址的地图。见stackoverflow.com/questions/31354601/…
【解决方案2】:

您将获得S3ObjectInputStream,它将给出该对象的字节表示。相反,您需要从S3Object 构建URI。据我所知,网址是按以下方式构建的:

S3_END_POINT + bucket + key.

检查S3Object 重定向位置的使用(S3 提供不同的端点 url,具体取决于您的位置)

因此:

String S3_END_POINT = "https://s3.amazonaws.com/"; // public files
S3Object s3Object = s3Client.getObject("bucketname", url);
String url = S3_END_POINT + s3Object.getBucketName() + SLASH + s3Object.getKey();
Picasso.with(context).load(url).into(imageView);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多