Android 从AmazonS3下载图像时如何使用毕加索库?
我正在AmazonS3上存储我的图像。我使用以下代码从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
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);