2014-05-05 10 views
8

Sto cercando di utilizzare AWS Api per impostare il tipo di contenuto di più oggetti e aggiungere un'intestazione 'content-encoding: gzip' a loro. Ecco il mio codice per farlo:Come impostare il tipo di contenuto di un oggetto S3 tramite l'SDK?

for (S3ObjectSummary summary : objs.getObjectSummaries()) 
    { 
     String key = summary.getKey(); 
     if (! key.endsWith(".gz")) 
      continue; 

     ObjectMetadata metadata = new ObjectMetadata(); 
     metadata.addUserMetadata("Content-Encoding", "gzip"); 
     metadata.addUserMetadata("Content-Type", "application/x-gzip"); 
     final CopyObjectRequest request = new CopyObjectRequest(bucket, key, bucket, key) 
       .withSourceBucketName(bucket) 
       .withSourceKey(key) 
       .withNewObjectMetadata(metadata); 

     s3.copyObject(request); 
    } 

Quando eseguo questo però, il seguente è il risultato:

screenshot

Come si può vedere, il prefisso x-amz-meta è stato aggiunto ai miei intestazioni personalizzate, ed erano inferiori. E l'intestazione content-type è stata ignorata, invece ha inserito www/form-encoded come intestazione.

Cosa posso fare per farlo accettare i miei valori di intestazione?

risposta

11

Trovato il problema. ObjectMetadata richiede che il tipo/codifica del contenuto sia impostato in modo esplicito anziché tramite addUserMetadata(). Modificando la seguente:

metadata.addUserMetadata("Content-Encoding", "gzip"); 
    metadata.addUserMetadata("Content-Type", "application/x-gzip"); 

a:

 metadata.setContentEncoding("gzip"); 
     metadata.setContentType("application/x-gzip"); 

risolto questo.

+0

ha funzionato per aws java android sdk –

Problemi correlati