2011-08-01 15 views
28

Poniższy kod służy tylko do pobierania plików tekstowych z zasobnika w S3. To nie działa w przypadku obrazu. Czy istnieje łatwiejszy sposób zarządzania pobieraniem/typami przy użyciu pakietu SDK AWS? Przykład zawarty w dokumentacji nie wyjaśnia tego. Dzięki!AWS S3 Java SDK - Pobierz pomoc pliku

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(); 
+0

muszę zrobić coś i spróbuj kod ale JAR Nie znaleziono można zasugerować, które jar use.Currently używam AWS-android-sdk-2.1.5-s3.jar słoik, ale nie znaleziono wszystkich th klas. – Ravi

+0

Czy masz jakiś pomysł, jak przesłać plik do Amazon.A używam Twojego kodu do pobrania pliku i działa idealnie. – Ravi

Odpowiedz

31

intead Reader i klas Writer należy używać InputStream i OutputStream klasach:

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(); 
+1

Próbowałem tego w pewnym momencie, ale wyraźnie nie udało :) Dzięki, zadziwiająco! –

43

Choć kod napisany w odpowiedzi Mauricio będzie działać - i jego punktu o strumieniach jest oczywiście poprawna - Amazon oferują szybszy sposób na zapisywanie plików w ich SDK. Nie wiem, czy nie był dostępny w 2011 roku, czy nie, ale teraz jest.

AmazonS3Client s3Client = new AmazonS3Client(myCredentials); 

File localFile = new File("localFilename"); 

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

Potrzebuje drobne zmiany: Zawartość obiektu jest zapisywana do pliku, ale zwróconym obiektem jest 'ObjectMetadata', a nie' S3Object'. Zobacz http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject%28com.amazonaws.services.s3.model.GetObjectRequest,%20java.io.File% 29 – azdev

+1

@azdev W rzeczywistości przykład kodu używa [innej wersji getObject] (http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject (java. lang.String,% 20java.lang.String)), który zwraca obiekt S3Object. – Eyal

+0

Jak to się stało, że nie widzę metody S3Client.getObject w moim kodzie? .. Chcę osiągnąć to samo, ale nie ma takiej metody powiązanej z moim obiektem s3Client. Czy brakuje mi czegoś? –

12

Odpowiedź Eyalsa doprowadza was do połowy, ale nie jest to aż tak jasne, więc wyjaśnię.

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(); 
+0

co użyłeś dla id.getId())? –

+0

Identyfikator id.getId() jest kluczem używanym do przechowywania obiektu w wiadrze. Po prostu używam mojego identyfikatora do klucza, ponieważ wiem, że jest wyjątkowy. Podsumowując, tworzysz pusty plik, wykonuj polecenie getRequest, informując aps awa, gdzie znajduje się nowy pusty plik, a aws api obsługuje zapisywanie obiektu do podanego pliku. Tak wygodne. –

+0

@ShawnVader: Czy możesz wyjaśnić, dlaczego sprawdzasz poprawność pliku. Chociaż S3 api wykonuje test hashowania. Dziękuję Ci. – saurabheights

Powiązane problemy