2015-06-21 137 views
2

我將圖像存儲在Amazon S3上。我用下面的代碼從Amazon S3下載圖像從Amazon S3下載圖像時如何使用Picasso圖書館?

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

圖像所以如何下載亞馬遜的S3圖像通過畢加索。

+0

你還沒有upvoted任何答案..你是認真的使用SO和幫助別人?我們不知道什麼對你有效.. – Siddharth

回答

0

您會得到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); 
2

您可以使用AmazonS3.generatePresignedUrl(String, String, Date)生成預先登記的url並將其傳遞給畢加索。這裏是一個例子"Generate a Pre-signed Object URL using AWS SDK for Java"。儘管該示例適用於Java SDK,但它適用於AWS Android SDK。

+0

這是不錯的方法。不知道AWS SDK有它。 :) –

+0

請注意,每當Amazon S3憑證過期(密鑰更改)時,預訂網址都會更改。因此,畢加索將再次從網絡加載圖像,而不是從緩存中加載圖像。你應該保留你的預定網址的地圖。見http://stackoverflow.com/questions/31354601/setting-key-for-picasso-for-s3-amazon – Ena