AWS S3 Java SDK - скачать файл
Приведенный ниже код работает только для загрузки текстовых файлов из ведра в 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();
Ответы
Ответ 1
Интеграция классов Reader и Writer вы должны использовать классы InputStream и OutputStream:
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();
Ответ 2
Хотя код, написанный в ответе Маурисио, будет работать - и его точка зрения на потоки, конечно, правильная - Amazon предлагает более быстрый способ сохранить файлы в своем SDK. Я не знаю, было ли это недоступно в 2011 году или нет, но сейчас.
AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
File localFile = new File("localFilename");
ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
Ответ 3
Ответы на 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();