2017-09-18 82 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自定义对象。