2017-07-23 39 views
1

當我將文件覆蓋到S3時,我將丟失元數據,因爲它被視爲新對象。我試圖在S3中覆蓋文件時保留文件的現有原始元數據。我從文檔中瞭解到,您無法修改S3存儲桶中某個對象的元數據,但是如何將現有的元數據「複製」到新的被覆蓋的對象?在S3中覆蓋文件時保留元數據

例如,我有下面這個方法:

public void uploadToS3(File file, String key, String bucketName) { 
    // original metadata 
    ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key); 
    // How do I set the new overwritten object to have this metadata above?? 

    try { 
     client.putObject(new PutObjectRequest(bucketName, key, file)); 
    } catch (AmazonServiceException e) { 
     e.printstacktrace(); 
    } catch(AmazonClientException e) { 
     e.printstacktrace(); 
    } 

如何「點」的新對象具有相同的元數據對象,只是重寫?

回答

0

在致電AmazonS3#putObject(PutObjectRequest)之前,先致電PutObjectRequest#withMetadata(ObjectMetadata)

ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key); 
client.putObject(new PutObjectRequest(bucketName, key, file) 
     .withMetadata(objMetadata)); 

注意,根據上Object Key and Metadata S3文檔,只有元數據的某些部分被允許進行更新。因此,您可能需要採取額外步驟來確保您的請求不會嘗試修改它不應該修改的內容。

ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key); 
// Call a helper method that clones only what you need to maintain in the metadata. 
ObjectMetadata clonedMetadata = cloneMetadata(objMetadata); 
client.putObject(new PutObjectRequest(bucketName, key, file) 
     .withMetadata(objMetadata));