KS3Client.java 3.49 KB
package com.bjivt.ksyun;

import java.io.ByteArrayInputStream;
import java.io.File;

import com.bjivt.util.PropertiesUtil;
import com.ksyun.ks3.dto.CannedAccessControlList;
import com.ksyun.ks3.dto.ObjectMetadata;
import com.ksyun.ks3.exception.serviceside.NotFoundException;
import com.ksyun.ks3.service.Ks3;
import com.ksyun.ks3.service.Ks3Client;
import com.ksyun.ks3.service.request.CreateBucketRequest;
import com.ksyun.ks3.service.request.HeadObjectRequest;
import com.ksyun.ks3.service.request.PutObjectRequest;

public class KS3Client {

	private  Ks3 client = null;
	private  String bucketName = PropertiesUtil.config.get("Ks3.bucket");
	private  String endpoint = PropertiesUtil.config.get("Ks3.endpoint");
	
	public KS3Client() {
		client = new Ks3Client(PropertiesUtil.config.get("Ks3.key"), PropertiesUtil.config.get("Ks3.secret"));
	}
	
	public KS3Client(String key, String secret) {
		client = new Ks3Client(key, secret);
	}
	
	/**
	 * 使用最简单的方式创建一个bucket
	 */
	public void createBucket(String bucket) {
		CreateBucketRequest request = new CreateBucketRequest(bucket);
	    //配置bucket的访问权限
	    request.setCannedAcl(CannedAccessControlList.PublicRead);
	    //执行操作
	    client.createBucket(request);
	}
	
	/**
	 * 删除一个bucket
	 * @param bucket
	 */
	public void deleteBucket(String bucket) {
		client.deleteBucket(bucket);
	}
	
	/**
	 * 上传文件
	 * @param file	文件
	 * @param key	目标路径
	 * @param isPublic	是否公开
	 * @return	访问URL
	 */
	public String putObject(File file, String key, boolean isPublic) {
		String accessUrl = null;
		//System.out.println("--------------------key:"+key);
		//System.out.println("--------------------file:"+file.getPath());
		PutObjectRequest request = new PutObjectRequest(this.bucketName, key, file);
	    if (isPublic == true) {
	    	//上传一个公开文件
	    	request.setCannedAcl(CannedAccessControlList.PublicRead);
	    	accessUrl = String.format("http://%s/%s/%s", this.endpoint, this.bucketName, key);
	    } else {
	    	accessUrl = String.format("http://%s.%s/%s", this.bucketName, this.endpoint, key);
	    }
	    client.putObject(request);
	    
	    return accessUrl;
	}
	/**
	    *将一个输入流中的内容上传至<bucket名称>这个存储空间下,并命名为<object key>
	*/
	public void putObjectAsStream(String key, String content){
	    ObjectMetadata meta = new ObjectMetadata();
	    PutObjectRequest request = new PutObjectRequest(bucketName,
	    		key, new ByteArrayInputStream(content.getBytes()),
	            meta);
	    // 可以指定内容的长度,否则程序会把整个输入流缓存起来,可能导致jvm内存溢出
	    meta.setContentLength(content.length());
	    client.putObject(request);
	}
	/**
	 * 判断一个object是否存在
	 */
	public  boolean objectExists(String objectName) {
	    try {
	        HeadObjectRequest request = new HeadObjectRequest(this.bucketName, objectName);
	        client.headObject(request);
	        return true;
	    } catch (NotFoundException e) {
	        return false;
	    }
	}
	
	/**
	 * 将<bucket名称>这个存储空间下的<object key>删除
	 */
	public void deleteObject(String objectName) {
	    client.deleteObject(this.bucketName, objectName);
	}
	
	public static void main(String[] args) {
		KS3Client ks3 = new KS3Client("fWUN8KDtJZJGo0ArQ4qo", "UIWPYVeaV8kq2vWImDkLBvWs/pwmTJVF9MCNHDsC");
		
		File file = new File("/Users/yumeiyan/Downloads/banner1.png");
		System.out.println(ks3.putObject(file, "avatar/banner1.png", true));		
	}
}