Android 从AmazonS3下载图像时如何使用毕加索库?

Android 从AmazonS3下载图像时如何使用毕加索库?,android,amazon-web-services,amazon-s3,picasso,Android,Amazon Web Services,Amazon S3,Picasso,我正在AmazonS3上存储我的图像。我使用以下代码从AmazonS3下载图像 S3ObjectInputStream content = s3Client.getObject("bucketname", url).getObjectContent(); byte[] bytes ; bytes = IOUtils.toByteArray(content); bitmap = BitmapFacto

我正在AmazonS3上存储我的图像。我使用以下代码从AmazonS3下载图像

 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;

那么如何通过毕加索下载Amazon S3图像。

您将获得
S3Object
InputStream
,它将给出该对象的字节表示。相反,您需要将URI从构建到
S3Object
。据我所知,url的构建方式如下:

S3\u端点+桶+键。

检查
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);

您可以使用生成预先签名的url并将其传递给毕加索。这里有一个例子。尽管该示例适用于Java SDK,但它也适用于AWS Android SDK。

这是一个不错的方法。不知道AWS SDK有它。:)请注意,每次AmazonS3凭据过期时,预签名的url都会发生更改(密钥更改)。所以毕加索将再次从网络而不是缓存中加载图像。您应该保留一个预签名URL的地图。看,你没有对任何答案投赞成票。。你真的要使用SO并帮助他人吗?我们不知道什么对你有用。。
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);