[英]AWS S3 Java SDK - Download file help
下面的代码仅适用于从 S3 中的存储桶下载文本文件。 这不适用于图像。 使用 AWS SDK 是否有更简单的方法来管理下载/类型? 文档中包含的示例并不明显。 谢谢!
AWSCredentials myCredentials = new BasicAWSCredentials(
String.valueOf(Constants.act), String.valueOf(Constants.sk));
AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
S3Object object = s3Client.getObject(new GetObjectRequest("bucket", "file"));
BufferedReader reader = new BufferedReader(new InputStreamReader(
object.getObjectContent()));
File file = new File("localFilename");
Writer writer = new OutputStreamWriter(new FileOutputStream(file));
while (true) {
String line = reader.readLine();
if (line == null)
break;
writer.write(line + "\n");
}
writer.close();
虽然用Mauricio的答案编写的代码也可以工作 - 而且他对流的观点当然是正确的 - 亚马逊提供了一种更快捷的方式来保存SDK中的文件。 我不知道它是否在2011年没有,但它现在是。
AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
File localFile = new File("localFilename");
ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
您应该使用InputStream
和OutputStream
类而不是Reader
和Writer
类:
InputStream reader = new BufferedInputStream(
object.getObjectContent());
File file = new File("localFilename");
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
int read = -1;
while ( ( read = reader.read() ) != -1 ) {
writer.write(read);
}
writer.flush();
writer.close();
reader.close();
Eyals的回答让你在那里走了一半,但不是那么清楚所以我会澄清。
AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
//This is where the downloaded file will be saved
File localFile = new File("localFilename");
//This returns an ObjectMetadata file but you don't have to use this if you don't want
s3Client.getObject(new GetObjectRequest(bucketName, id.getId()), localFile);
//Now your file will have your image saved
boolean success = localFile.exists() && localFile.canRead();
使用java.nio.file.Files
将S3Object
复制到本地文件。
public File getFile(String fileName) throws Exception {
if (StringUtils.isEmpty(fileName)) {
throw new Exception("file name can not be empty");
}
S3Object s3Object = amazonS3.getObject("bucketname", fileName);
if (s3Object == null) {
throw new Exception("Object not found");
}
File file = new File("you file path");
Files.copy(s3Object.getObjectContent(), file.toPath());
inputStream.close();
return file;
}
有更简单的方法来实现这一目标。 我使用下面的代码片段。 从http://docs.ceph.com/docs/mimic/radosgw/s3/java/获得参考
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_1).build();
s3client.getObject(
new GetObjectRequest("nomad-prop-pics", "Documents/1.pdf"),
new File("D:\\Eka-Contract-Physicals-Dev\\Contracts-Physicals\\utility-service\\downlods\\1.pdf")
);
依赖关系 AWS S3 存储桶
implementation "commons-logging:commons-logging-api:1.1"
implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.1000')
implementation 'com.amazonaws:aws-android-sdk-core:2.6.0'
implementation 'com.amazonaws:aws-android-sdk-cognito:2.2.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.6.0'
从 S3 存储桶下载 object 并存储在本地存储中。
try {
//Creating credentials
AWSCredentials awsCredentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
//Creating S3
AmazonS3Client s3Client = new AmazonS3Client(awsCredentials);
//Creating file path
File dir = new File(this.getExternalFilesDir("AWS"),"FolderName");
if(!dir.exists()){
dir.mkdir();
}
//Object Key
String bucketName = "*** Bucket Name ***";
String objKey = "*** Object Key ***";
//Get File Name from Object key
String name = objKey.substring(objKey.lastIndexOf('/') + 1);
//Storing file S3 object in file path
InputStream in = s3Client.getObject(new GetObjectRequest(bucketName, objKey)).getObjectContent();
Files.copy(in,Paths.get(dir.getAbsolutePath()+"/"+name));
in.close();
} catch (Exception e) {
Log.e("TAG", "onCreate: " + e);
}
从 S3 存储桶中获取 Object 的列表
public void getListOfObject()
{
ListObjectsV2Result result ;
AWSCredentials awsCredentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
AmazonS3Client s3Client = new AmazonS3Client(awsCredentials);
result = s3Client.listObjectsV2(AWS_BUCKET);
for( S3ObjectSummary s3ObjectSummary : result.getObjectSummaries())
{
Log.e("TAG", "onCreate: "+s3ObjectSummary.getKey() );
}
}
检查桶中是否存在object
public String isObjectAvailable(String object_key)
{
try {
AWSCredentials awsCredentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
AmazonS3 s3 = new AmazonS3Client(awsCredentials);
String bucketName = AWS_BUCKET;
S3Object object = s3.getObject(bucketName, object_key);
Log.e("TAG", "isObjectAvailable: "+object.getKey()+","+object.getBucketName() );
} catch (AmazonServiceException e) {
String errorCode = e.getErrorCode();
if (!errorCode.equals("NoSuchKey")) {
// throw e;
Log.e("TAG", "isObjectAvailable: "+e );
}
return "no such key";
}
return "null";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.