All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ksyun.ks3.service.response.GetObjectResponse Maven / Gradle / Ivy

package com.ksyun.ks3.service.response;

import com.ksyun.ks3.AutoAbortInputStream;
import com.ksyun.ks3.config.Constants;
import com.ksyun.ks3.dto.GetObjectResult;
import com.ksyun.ks3.dto.ObjectMetadata;
import com.ksyun.ks3.http.HttpHeaders;
import com.ksyun.ks3.utils.Converter;
import com.ksyun.ks3.utils.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;

/**
 * @author lijunwei[[email protected]]  
 * 
 * @date 2014年10月20日 下午7:55:52
 * 
 * @description
 **/
public class GetObjectResponse extends Ks3WebServiceStreamResponse {
	private static Log log = LogFactory.getLog(GetObjectResponse.class);

	public int[] expectedStatus() {
		/**
		 * 200 正常 206加rang的时候 304 not modified 412 Precondition Failed
		 */
		return new int[] { 200, 206, 304, 412 };
	}

	@Override
	public void preHandle() {
		ObjectMetadata metaData = new ObjectMetadata();
		result = new GetObjectResult();
		int statusCode = this.getHttpResponse().getStatusLine().getStatusCode();
		if (statusCode == 200 || statusCode == 206) {
			//自动释放http链接
			result.getObject().setObjectContent(new AutoAbortInputStream(getContent(),this.getHttpRequest()));
			result.getObject().setRedirectLocation(
					getHeader(HttpHeaders.XKssWebsiteRedirectLocation
							.toString()));
			Header[] headers = this.getHttpResponse().getAllHeaders();
			for (int i = 0; i < headers.length; i++) {
				if (headers[i].getName().startsWith(Constants.userMetaPrefix)) {
					metaData.setUserMeta(headers[i].getName(),
							headers[i].getValue());
				} else {
					String key = headers[i].getName();
					String value = headers[i].getValue();
					if (Constants.KS3_IGNOREG_HEADERS.contains(key)) {
						// ignore...
					} else if (key.equals(HttpHeaders.LastModified.toString())) {
						try {
							metaData.setLastModified(DateUtils
									.convertStr2Date(value));
						} catch (Exception pe) {
							log.warn("Unable to parse last modified date: "
									+ value, pe);
						}
					} else if (key.equals(HttpHeaders.ContentLength.toString())) {
						try {
							metaData.setHeader(key, Long.parseLong(value));
						} catch (NumberFormatException nfe) {
							log.warn(
									"Unable to parse content length: " + value,
									nfe);
						}
					} else if (key.equals(HttpHeaders.ETag.toString())) {
						metaData.setHeader(key, value.replace("\"", ""));
					}else if (key.equals(HttpHeaders.ContentMD5.toString())){
						metaData.setHeader(HttpHeaders.ContentMD5.toString(),value.replace("\"", "") );
					} else if (key.equals(HttpHeaders.Expires.toString())) {
						try {
							metaData.setHttpExpiresDate(DateUtils
									.convertStr2Date(value));
						} catch (Exception pe) {
							log.warn("Unable to parse http expiration date: "
									+ value, pe);
						}
					} else if (key.equals(Constants.versionIdHeader)) {
						result.getObject().setVersionId(value);
					} else {
						metaData.setHeader(key, value);
					}
				}
			}
			result.getObject().setObjectMetadata(metaData);
		}else if(statusCode ==304){
			result.setIfModified(false);
		}else if(statusCode == 412){
			result.setIfPreconditionSuccess(false);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy