![JAR search and dependency download from the Maven repository](/logo.png)
com.ksyun.ks3.service.request.GetObjectRequest 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 java.util.Map.Entry;
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.DateUtils;
import com.ksyun.ks3.utils.HttpUtils;
import com.ksyun.ks3.utils.DateUtils.DATETIME_PROTOCOL;
import com.ksyun.ks3.utils.StringUtils;
/**
* @author lijunwei[[email protected]]
*
* @date 2014年10月20日 下午7:55:25
*
* @description 获取object
* 支持分块下载,可通过setRange(long,long)实现
* 支持缓存控制,通过matchingETagConstraints、nonmatchingEtagConstraints、unmodifiedSinceConstraint、modifiedSinceConstraint控制
* 支持重写返回的http headers,通过修改overrides实现
**/
public class GetObjectRequest extends Ks3WebServiceRequest {
private String bucket;
private String key;
// 要获取的 versionId
private String versionId;
private long [] range = null;
/**
* object的etag能匹配到则返回,否则返回结果的ifPreconditionSuccess为false,object为空
*/
private List matchingETagConstraints = new ArrayList();
/**
* object的etag不同于其中的任何一个,否则返回结果的ifModified为false,object为空
*/
private List nonmatchingEtagConstraints = new ArrayList();
/**
* 在此时间之后没有被修改过,否则返回结果的ifPreconditionSuccess为false,object为空
*/
private Date unmodifiedSinceConstraint;
/**
* 在此时间之后被修改过,否则返回结果的ifModified为false,object为空
*/
private Date modifiedSinceConstraint;
/**
* 修改返回的response的headers
*/
private ResponseHeaderOverrides overrides = new ResponseHeaderOverrides();
/**
* 指定服务端加密使用的算法及key
*/
private SSECustomerKey sseCustomerKey;
/**
*
* @param bucket
* @param key
* @param versionId
*/
public GetObjectRequest(String bucket, String key, String versionId) {
this.bucket = bucket;
this.key = key;
this.versionId = versionId;
}
/**
*
* @param bucketname
* @param key
*/
public GetObjectRequest(String bucketname,String key)
{
this.bucket = bucketname;
this.key = key;
}
@Override
public void validateParams() throws IllegalArgumentException {
if(StringUtils.isBlank(this.bucket))
throw notNull("bucketname");
if(StringUtils.isBlank(this.key))
throw notNull("objectkey");
}
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 void setRange(long[] range) {
this.range = range;
}
public long [] getRange() {
return range;
}
public void setRange(long start,long end) {
this.range = new long[]{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;
}
public String getVersionId() {
return versionId;
}
public void setVersionId(String versionId) {
this.versionId = versionId;
}
/**
* 在此时间之后没有被修改过,否则返回结果的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;
}
/**
* 修改返回的response的headers
*/
public void setOverrides(ResponseHeaderOverrides overrides) {
this.overrides = overrides;
}
public SSECustomerKey getSseCustomerKey() {
return sseCustomerKey;
}
public void setSseCustomerKey(SSECustomerKey sseCustomerKey) {
this.sseCustomerKey = sseCustomerKey;
}
@Override
public void buildRequest(Request request) {
request.setMethod(HttpMethod.GET);
request.setBucket(bucket);
request.setKey(key);
if(range!=null&&range.length==2)
request.addHeader(HttpHeaders.Range,"bytes="+range[0]+"-"+range[1]);
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, DateUtils.convertDate2Str(this.unmodifiedSinceConstraint, DATETIME_PROTOCOL.RFC1123).toString());
if(this.modifiedSinceConstraint !=null)
request.addHeader(HttpHeaders.IfModifiedSince, DateUtils.convertDate2Str(this.modifiedSinceConstraint, DATETIME_PROTOCOL.RFC1123).toString());
request.getQueryParams().putAll(this.getOverrides().getOverrides());
//添加服务端加密相关
request.getHeaders().putAll(HttpUtils.convertSSECustomerKey2Headers(sseCustomerKey));
// 添加 versionId
if(!StringUtils.isBlank(versionId)) {
request.addQueryParam("versionId", versionId);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy