← 回到文章列表

阿里云OSS分享系统设计(一)

研究了下阿里云提供的oss java sdk 发现有点不靠谱 还好阿里云有给出api接口文档 那就照著api接口文档做好了 成果地址: http://teemo.name/ 几个需要解决的问题: 1.文档定位问题 使用prefix和delimiter两个参数就可以定…

研究了下阿里云提供的oss java sdk
发现有点不靠谱
还好阿里云有给出api接口文档
那就照著api接口文档做好了
成果地址: <http://teemo.name/>

几个需要解决的问题:
1.文档定位问题
使用prefix和delimiter两个参数就可以定位资料夹地址
以及显示几层目录文档
2.关于Sign加密问题
文章内容会给出一个加密工具
用来HMAC_SHA1加密使用
3.返回XML解析问题

直接采用JOX进行分层解析转换即可
4.访问方式
采用httpclient

先给出树结构

[媒体不可用]

今天先给出四个Utils的源

//GMTUtils

package name.yumao.oss.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.SimpleTimeZone;

public class GMTUtils {
	public static String getGMTDateStr() {
	    Date d = new Date();
	    SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
	    dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));
	    return dateFormat.format(d);
	}
}

//JOXUtils
package name.yumao.oss.utils;

import java.io.ByteArrayInputStream;

import com.wutka.jox.JOXBeanInputStream;

import name.yumao.oss.entity.ListBucketResultBean;

public class JOXUtils {
	public static ListBucketResultBean XML2Bean(String resData){
		ListBucketResultBean listBucketResultBean = new ListBucketResultBean();
		try{
			ByteArrayInputStream stream = new ByteArrayInputStream(resData.getBytes("UTF-8"));
			JOXBeanInputStream joxIn = new JOXBeanInputStream(stream); 
			listBucketResultBean = (ListBucketResultBean) joxIn.readObject(ListBucketResultBean.class); 
			//关闭流
			stream.close();
			joxIn.close();
		}catch(Exception e){
			//logger.info("XML转Bean失败!");
		}
		return listBucketResultBean;
	}
}


//OSSUtils

package name.yumao.oss.utils;

import name.yumao.oss.entity.CommonPrefixesBean;
import name.yumao.oss.entity.ContentsBean;
import name.yumao.oss.entity.OssFileBean;

public class OSSUtils {
	//设置特定文件打开方式
	public static OssFileBean FilesTODO(OssFileBean ossFileBean,ContentsBean contentsBean){
		if(contentsBean.getKey().startsWith("Tarena/")
				||contentsBean.getKey().startsWith("Docs/")){
			ossFileBean.setToDo(
			"downFile('http://reader.oss.aliyuncs.com/Utils/FlexPaperViewer.swf?SwfFile=http://reader.oss.aliyuncs.com/"
			 + contentsBean.getKey() + "&Scale=2.0')");
		}
		if(contentsBean.getKey().endsWith(".mp3")){
			ossFileBean.setToDo(
			"downFile('http://reader.oss.aliyuncs.com/Utils/player.swf?soundfile=http://reader.oss.aliyuncs.com/" 
			+ contentsBean.getKey() + "&autostart=yes')");
		}
		return ossFileBean;
	}
	//设置特定文件夹打开方式
	public static OssFileBean FoldersTODO(OssFileBean ossFileBean,CommonPrefixesBean commonPrefixesBean){
		if(commonPrefixesBean.getPrefix().equals("Java_1.6_API/")
				||commonPrefixesBean.getPrefix().equals("JQuery/")
				||commonPrefixesBean.getPrefix().equals("PHP_API/")){
			ossFileBean.setToDo("downFile('http://reader.oss.aliyuncs.com/" + commonPrefixesBean.getPrefix() + "index.html')");
		}
		return ossFileBean;
	}
}

//SignUtils

package name.yumao.oss.utils;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class SignUtils {
	private static final String HMAC_SHA1 = "HmacSHA1";
	public static byte[] getSignature(byte[] data, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
		SecretKeySpec signingKey = new SecretKeySpec(key, HMAC_SHA1);
		Mac mac = Mac.getInstance(HMAC_SHA1);
		mac.init(signingKey);
		byte[] rawHmac = mac.doFinal(data);
		return rawHmac;
	}
}

在这里找找

输入关键词,找一篇过去的记录。