2013-02-05 45 views
5

Sto provando a caricare un file su un bucket Amazon S3 utilizzando l'SDK AWS.Carica un file su S3 utilizzando l'SDK AWS

class LogToS3Bucket extends Thread{ 

    public void run() { 
     super.run(); 
     Gdx.app.log("msg", "secondThreadRunning yeahhhhh!"); 
     File fileToPut = new File("../../../MyProject", "settings.txt"); 
     String accessKey = "<accessKey>"; 
     String secretKey = "<secretKey>"; 
     AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); 
     AmazonS3 conn = new AmazonS3Client(credentials); 

     conn.putObject("bucketname", "filename.txt", fileToPut); 
    } 

} 

Non funziona, però, genera un errore sulla chiamata a .putObject()

Exception in thread "Thread-1" Status Code: 400, AWS Service: Amazon S3, AWS Error Code: BadDigest, AWS Error Message: The Content-MD5 you specified did not match what we received. 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:614) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:312) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:165) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2951) 
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1123) 
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:979) 
    at com.myproject.LogToS3Bucket.run(LogToS3Bucket.java:22) 
+0

hai provato con l'esempio che hanno fornito con AWS android sdk? – itsrajesh4uguys

+0

Sì, questo è il codice di esempio. Tuttavia, non funziona dal mio telefono. Penso che devi usare l'SDK Android per un dispositivo Android. È un po 'fastidioso perché ho bisogno di una soluzione multipiattaforma. – kelorek

risposta

5

ho capito ho think-- dato la mia domanda è costantemente modificando il file e questo frammento avviene in un thread separato, il file viene effettivamente modificato prima che venga caricato ... Se faccio una copia temporanea del file e la carica nel bucket, funziona.

+0

copia temporanea ?? puoi spiegarci un po 'di più? –

+0

Effettua una copia profonda del file (scatta un'istantanea dei dati del file in memoria o eseguendo una copia sul filesystem) in modo da non scrivere a metà caricamento. In alternativa, puoi utilizzare un meccanismo di blocco per mantenere separati il ​​caricamento e la scrittura dei file. – kelorek

Problemi correlati