it-swarm.com.de

AWS S3 Java SDK - Hilfe zum Herunterladen der Datei

Der folgende Code funktioniert nur zum Herunterladen von Textdateien aus einem Bucket in S3. Dies funktioniert nicht für ein Bild. Gibt es eine einfachere Möglichkeit, Downloads/Typen mithilfe des AWS SDK zu verwalten? Das in der Dokumentation enthaltene Beispiel macht es nicht deutlich. Vielen Dank!

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();
33
user375566

Anstelle von Reader und Writer Klassen sollten Sie InputStream und OutputStream Klassen verwenden:

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

Obwohl der in Mauricios Antwort geschriebene Code funktionieren wird - und sein Standpunkt zu Streams ist natürlich richtig -, bietet Amazon eine schnellere Möglichkeit, Dateien in ihrem SDK zu speichern. Ich weiß nicht, ob es 2011 nicht verfügbar war oder nicht, aber jetzt ist es.

AmazonS3Client s3Client = new AmazonS3Client(myCredentials);

File localFile = new File("localFilename");

ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
55
Eyal

Eyals Antwort bringt Sie auf halbem Weg, aber es ist nicht so klar, also werde ich klarstellen. 

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(); 
13
Shawn Vader

Es gibt sogar einen viel einfacheren Weg, dies zu erhalten. Ich habe unten Ausschnitt verwendet. Bekannte Referenz von 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")
    );
1
user10913634

Verwenden Sie Java.nio.file.Files, um S3Object in die lokale Datei zu kopieren.

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;
}
0
Nitin Vavdiya