在 android 中直接使用 aws s3 将图像加载到 imageview 而无需下载到本地存储
Load image to imageview directly using aws s3 without downloading to local storage in android
我正在使用 aws s3 从数字海洋空间加载图像,现在它将图像下载到本地存储,然后在图像视图中加载图像,但我需要直接加载图像而不是在本地下载图像
我的当前代码:
AmazonS3Client s3;
BasicAWSCredentials credentials;
TransferUtility transferUtility;
final TransferObserver observer,observers;
String key = "XXXXXXXX";
String secret = "XXXXXXXXXXXXX";
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://xxx.yyyy.com");
transferUtility = new TransferUtility(s3, getApplicationContext());
CannedAccessControlList filePermission = CannedAccessControlList.PublicRead;
observer = transferUtility.download(
"xxx",
"xxxx/01.jpg",
new File("/storage/emulated/0/camera 1/05.jpg")
);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (state.COMPLETED.equals(observer.getState())) {
Toast.makeText(getApplicationContext(), "Space Download completed !!", Toast.LENGTH_LONG).show();
Bitmap bmp = BitmapFactory.decodeFile("/storage/emulated/0/camera 1/05.jpg");
imgview.setImageBitmap(bmp);
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
Toast.makeText(getApplicationContext(), "Space Download error: " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
});
- 您可以使用 Picasso 从 url 加载图像。
这是一个例子 -
在应用级别使用Gradle:
implementation 'com.squareup.picasso:picasso:2.71828'
使用此行从您的 url -
加载图像
Picasso.get().load("https://xxx.yyyy.com/your_image.png").into(imageView); // Your imageview
- Glide也是一个解决方案
使用Gradle:
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}
// For a simple view:
Glide.with(this).load("https://xxx.yyyy.com/your_image.png").into(imageView);
- Fresco 也是一个在 Android 中显示图像的强大系统,由 facebook 开发。
享受android
@karthikeyan 评论帮助我这里是答案:
AmazonS3Client s3;
BasicAWSCredentials credentials;
String key = "xxxxx"; //SpacesKey
String secret = "yyyyyyyyy"; //Spaces Secret key
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://RegionName.digitaloceanspaces.com"); //endpoint
Date expires = new Date (new Date().getTime() + 1000 * 60); // 1 minute to expire
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey); //generating the signatured url
generatePresignedUrlRequest.setExpiration(expires);
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
使用 url
使用 Picasso 或 Glide 将图像加载到图像视图
我正在使用 aws s3 从数字海洋空间加载图像,现在它将图像下载到本地存储,然后在图像视图中加载图像,但我需要直接加载图像而不是在本地下载图像
我的当前代码:
AmazonS3Client s3;
BasicAWSCredentials credentials;
TransferUtility transferUtility;
final TransferObserver observer,observers;
String key = "XXXXXXXX";
String secret = "XXXXXXXXXXXXX";
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://xxx.yyyy.com");
transferUtility = new TransferUtility(s3, getApplicationContext());
CannedAccessControlList filePermission = CannedAccessControlList.PublicRead;
observer = transferUtility.download(
"xxx",
"xxxx/01.jpg",
new File("/storage/emulated/0/camera 1/05.jpg")
);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (state.COMPLETED.equals(observer.getState())) {
Toast.makeText(getApplicationContext(), "Space Download completed !!", Toast.LENGTH_LONG).show();
Bitmap bmp = BitmapFactory.decodeFile("/storage/emulated/0/camera 1/05.jpg");
imgview.setImageBitmap(bmp);
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
Toast.makeText(getApplicationContext(), "Space Download error: " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
});
- 您可以使用 Picasso 从 url 加载图像。 这是一个例子 -
在应用级别使用Gradle:
implementation 'com.squareup.picasso:picasso:2.71828'
使用此行从您的 url -
加载图像Picasso.get().load("https://xxx.yyyy.com/your_image.png").into(imageView); // Your imageview
- Glide也是一个解决方案
使用Gradle:
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}
// For a simple view:
Glide.with(this).load("https://xxx.yyyy.com/your_image.png").into(imageView);
- Fresco 也是一个在 Android 中显示图像的强大系统,由 facebook 开发。
享受android
@karthikeyan 评论帮助我这里是答案:
AmazonS3Client s3;
BasicAWSCredentials credentials;
String key = "xxxxx"; //SpacesKey
String secret = "yyyyyyyyy"; //Spaces Secret key
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://RegionName.digitaloceanspaces.com"); //endpoint
Date expires = new Date (new Date().getTime() + 1000 * 60); // 1 minute to expire
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey); //generating the signatured url
generatePresignedUrlRequest.setExpiration(expires);
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
使用 url
使用 Picasso 或 Glide 将图像加载到图像视图