2017-09-18 116 views
1

我想創建的ObjectMetadata類的自定義頁眉和有下面的代碼爲它AWS S3響應頭

private String cust_header; 
public String getcust_header() { 
    return cust_header; 
} 

public void setcust_header(String cust_header) { 
    cust_header = cust_header; 
} 

這是構造的樣子:

private ObjectMetadata(ObjectMetadata from) { 
    this.userMetadata = from.userMetadata == null 
     ? null 
     : new TreeMap<String,String>(from.userMetadata); 
    // shallow clone the meata data 
    this.metadata = from.metadata == null 
     ? null 
     : new TreeMap<String, Object>(from.metadata); 
    this.expirationTime = cloneDate(from.expirationTime); 
    this.expirationTimeRuleId = from.expirationTimeRuleId; 
    this.httpExpiresDate = cloneDate(from.httpExpiresDate); 
    this.ongoingRestore = from.ongoingRestore; 
    this.restoreExpirationTime = cloneDate(from.restoreExpirationTime); 
    this.cust_header = "custom header"; 
} 

我想將文件上傳到s3實例並獲取響應頭。以下是我的代碼:

AmazonS3 conn = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)) 
      .withRegion(Regions.US_WEST_2).build(); 
    Bucket bucket; 
    if (conn.doesBucketExist("xxx")) { 
     System.out.println("Bucket already exists"); 

    } 
    bucket = conn.createBucket("xxx"); 

    ByteArrayInputStream input = new ByteArrayInputStream("Hello World!".getBytes()); 
    ObjectMetadata objectMetadata = new ObjectMetadata(); 
    PutObjectRequest request = new PutObjectRequest(bucket.getName(), "hello.txt", input, objectMetadata); 

    PutObjectResult response = conn.putObject(request); 

    S3Object object = conn.getObject(new GetObjectRequest(bucket.getName(), "hello.txt")); 
    InputStream objectData = object.getObjectContent(); 
    System.out.println("Content-Type: " + object.getObjectMetadata().getContentType() + " custom Header : " 
      + object.getObjectMetadata().getcust_header()); 

我試圖打印所有標題。 但是我在嘗試打印所有標題時收到空值。有人能解釋我哪裏出錯了嗎?

來源AWS Documentation

回答

0

我在這工作的罰款解決趕到。與HTTP標頭不同,將被響應讀取的自定義標頭必須設置。然後,我們可以打印象下面這樣:

Date expirationTime = new Date(); 
response.setETag("123"); 
response.setExpirationTime(expirationTime); 
System.out.println("ET Flag : " + response.getETag() + " " + "Expiration Time" + response.getExpirationTime() + " "); 

首先,我們必須創建ObjectMetadata自定義標題,然後 我們必須使用在PutObjectRequest提供的方法或創建自定義的getter和setter自定義對象。