com.ksyun.ks3.service.request.HeadObjectRequest Maven / Gradle / Ivy
package com.ksyun.ks3.service.request;
import java.util.ArrayList;
import static com.ksyun.ks3.exception.client.ClientIllegalArgumentExceptionGenerator.notNull;
import static com.ksyun.ks3.exception.client.ClientIllegalArgumentExceptionGenerator.notCorrect;
import java.util.Date;
import java.util.List;
import com.ksyun.ks3.dto.ResponseHeaderOverrides;
import com.ksyun.ks3.dto.SSECustomerKey;
import com.ksyun.ks3.http.HttpHeaders;
import com.ksyun.ks3.http.HttpMethod;
import com.ksyun.ks3.http.Request;
import com.ksyun.ks3.utils.HttpUtils;
import com.ksyun.ks3.utils.StringUtils;
/**
* @author lijunwei[[email protected]]
*
* @date 2014年10月22日 下午7:40:04
*
* @description Head请求一个object,可以用来判断一个object是否存在或者是用来获取object的元数据
**/
public class HeadObjectRequest extends Ks3WebServiceRequest {
private String bucket;
private String key;
private String range = null;
private String versionId;
/**
* object的etag能匹配到则返回,否则返回结果的ifPreconditionSuccess为false,metadata为空
*/
private List matchingETagConstraints = new ArrayList();
/**
* object的etag不同于其中的任何一个,否则返回结果的ifModified为false,metadata为空
*/
private List nonmatchingEtagConstraints = new ArrayList();
/**
* 在此时间之后没有被修改过,否则返回结果的ifPreconditionSuccess为false,metadata为空
*/
private Date unmodifiedSinceConstraint;
/**
* 在此时间之后被修改过,否则返回结果的ifModified为false,metadata为空
*/
private Date modifiedSinceConstraint;
/**
* 指定服务端加密使用的算法及key
*/
private SSECustomerKey sseCustomerKey;
/**
* 修改返回的response的headers
*/
private ResponseHeaderOverrides overrides = new ResponseHeaderOverrides();
public HeadObjectRequest(String bucketname,String objectkey)
{
this.bucket = bucketname;
this.key = objectkey;
}
public HeadObjectRequest(String bucket, String key, String versionId) {
this.bucket = bucket;
this.key = key;
this.versionId = versionId;
}
@Override
public void validateParams() throws IllegalArgumentException {
if(StringUtils.isBlank(this.bucket))
throw notNull("bucketname");
if(StringUtils.isBlank(this.key))
throw notNull("objectkey");
if(!StringUtils.isBlank(range))
{
if(!range.startsWith("bytes="))
throw notCorrect("Range",range," bytes=x-y,y>=x");
}
}
public String getVersionId() {
return versionId;
}
public void setVersionId(String versionId) {
this.versionId = versionId;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getRange() {
return range;
}
public void setRange(long start,long end) {
this.range = "bytes="+start+"-"+end;
}
/**
* object的etag能匹配到则返回,否则返回结果的ifPreconditionSuccess为false,object为空
*/
public List getMatchingETagConstraints() {
return matchingETagConstraints;
}
/**
* object的etag能匹配到则返回,否则返回结果的ifPreconditionSuccess为false,object为空
*/
public void setMatchingETagConstraints(List matchingETagConstraints) {
this.matchingETagConstraints = matchingETagConstraints;
}
/**
* object的etag不同于其中的任何一个,否则返回结果的ifModified为false,object为空
*/
public List getNonmatchingEtagConstraints() {
return nonmatchingEtagConstraints;
}
/**
* object的etag不同于其中的任何一个,否则返回结果的ifModified为false,object为空
*/
public void setNonmatchingEtagConstraints(
List nonmatchingEtagConstraints) {
this.nonmatchingEtagConstraints = nonmatchingEtagConstraints;
}
/**
* 在此时间之后没有被修改过,否则返回结果的ifPreconditionSuccess为false,object为空
*/
public Date getUnmodifiedSinceConstraint() {
return unmodifiedSinceConstraint;
}
/**
* 在此时间之后没有被修改过,否则返回结果的ifPreconditionSuccess为false,object为空
*/
public void setUnmodifiedSinceConstraint(Date unmodifiedSinceConstraint) {
this.unmodifiedSinceConstraint = unmodifiedSinceConstraint;
}
/**
* 在此时间之后被修改过,否则返回结果的ifModified为false,object为空
*/
public Date getModifiedSinceConstraint() {
return modifiedSinceConstraint;
}
/**
* 在此时间之后被修改过,否则返回结果的ifModified为false,object为空
*/
public void setModifiedSinceConstraint(Date modifiedSinceConstraint) {
this.modifiedSinceConstraint = modifiedSinceConstraint;
}
public ResponseHeaderOverrides getOverrides() {
return overrides;
}
public void setOverrides(ResponseHeaderOverrides overrides) {
this.overrides = overrides;
}
public void setRange(String range) {
this.range = range;
}
public SSECustomerKey getSseCustomerKey() {
return sseCustomerKey;
}
public void setSseCustomerKey(SSECustomerKey sseCustomerKey) {
this.sseCustomerKey = sseCustomerKey;
}
@Override
public void buildRequest(Request request) {
request.setMethod(HttpMethod.HEAD);
request.setBucket(bucket);
request.setKey(key);
if(!StringUtils.isBlank(range))
request.addHeader(HttpHeaders.Range,range);
if(matchingETagConstraints.size()>0)
request.addHeader(HttpHeaders.IfMatch, StringUtils.join(matchingETagConstraints, ","));
if(nonmatchingEtagConstraints.size()>0)
request.addHeader(HttpHeaders.IfNoneMatch, StringUtils.join(nonmatchingEtagConstraints, ","));
if(this.unmodifiedSinceConstraint !=null)
request.addHeader(HttpHeaders.IfUnmodifiedSince, this.unmodifiedSinceConstraint.toGMTString());
if(this.modifiedSinceConstraint !=null)
request.addHeader(HttpHeaders.IfModifiedSince, this.modifiedSinceConstraint.toGMTString());
request.getQueryParams().putAll(this.overrides.getOverrides());
//添加服务端加密相关
request.getHeaders().putAll(HttpUtils.convertSSECustomerKey2Headers(sseCustomerKey));
// 添加 versionId
if(!StringUtils.isBlank(versionId)) {
request.addQueryParam("versionId", versionId);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy