Welcome to Yumao′s Blog.
本po文會給出剩下所有的需求源碼
先是關於HttpClient多線程處理
可以使用listener加載形式
在Tomcat啓動時就進行初始化加載
操作如下:
在web.xml中添加
<!-- 初始化多线程HTTP -->
<listener>
<listener-class>name.yumao.oss.startup.StartThreadHttpClient</listener-class>
</listener>
然後新建name.yumao.oss.startup.StartThreadHttpClient類
源碼如下:
package name.yumao.oss.startup;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import name.yumao.oss.common.ThreadHttpClient;
import org.apache.log4j.Logger;
public class StartThreadHttpClient implements ServletContextListener {
private static Logger logger = Logger.getLogger(StartThreadHttpClient.class);
public void contextDestroyed(ServletContextEvent arg0) {
}
public void contextInitialized(ServletContextEvent arg0) {
logger.info("*********初始化多线程Http*********");
ThreadHttpClient.getInstance();
ThreadHttpClient.getInstance().initHttp();
logger.info("*******多线程Http初始化完毕********");
}
}
ThreadHttpClient多線程類以前的文章有Po過
這裏就不多提了
可以使用部落格右側的檢索功能進行關鍵字檢索
然後是核心action類
因爲懶所以連service都沒分開了
但是又不想改
所以就成如下這樣了
Orz
package name.yumao.oss.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import name.yumao.oss.common.ThreadHttpClient;
import name.yumao.oss.entity.CommonPrefixesBean;
import name.yumao.oss.entity.ContentsBean;
import name.yumao.oss.entity.ListBucketResultBean;
import name.yumao.oss.entity.OssFileBean;
import name.yumao.oss.utils.GMTUtils;
import name.yumao.oss.utils.OSSUtils;
import name.yumao.oss.utils.SignUtils;
import name.yumao.oss.utils.JOXUtils;
public class AliyunOssAction {
private static final String ACCESS_ID = "";
private static final String ACCESS_KEY = "";
private static final String BUCKET_NAME = "";
private static final String GETURL = "http://oss.aliyuncs.com/" + BUCKET_NAME;
//---------------------------------------------------------------------
private List<OssFileBean> ossFileBeanList;
public List<OssFileBean> getOssFileBeanList() {
return ossFileBeanList;
}
public void setOssFileBeanList(List<OssFileBean> ossFileBeanList) {
this.ossFileBeanList = ossFileBeanList;
}
private String nowUrl;
public String getNowUrl() {
return nowUrl;
}
public void setNowUrl(String nowUrl) {
this.nowUrl = nowUrl;
}
//---------------------------------------------------------------------
public String index() throws Exception{
//初始化列表
if(ossFileBeanList==null){
ossFileBeanList = new ArrayList<OssFileBean>();
}
//若没有当前路径 则判定为根目录
if(nowUrl==null){
nowUrl = "";
}
//连接阿里云OSS 获取文件列表
DefaultHttpClient http=ThreadHttpClient.getInstance().getHttpclient();
//设置HTTP超时时间
setTimeout(http);
//新建Get对象
HttpGet get = new HttpGet(GETURL);
//设置get头
get.setHeader("Date", GMTUtils.getGMTDateStr());
get.setHeader("max-keys","1000");
get.setHeader("prefix", new String(nowUrl.getBytes("UTF-8"),"ISO8859-1"));
get.setHeader("delimiter","/");
//准备使用密钥进行加密
String SignStr = "GET\n\n\n"+GMTUtils.getGMTDateStr()+"\n/" + BUCKET_NAME;
byte[] signature = SignUtils.getSignature(SignStr.getBytes("UTF-8"), ACCESS_KEY.getBytes("UTF-8"));
String sign = Base64.encode(signature);
get.setHeader("Authorization","OSS " + ACCESS_ID + ":" + sign);
//进行数据请求
HttpResponse response = http.execute(get);
String resData = new String(EntityUtils.toString(response.getEntity()).getBytes("ISO8859-1"),"UTF-8");
//转换成Bean进行处理
ListBucketResultBean listBucketResultBean = JOXUtils.XML2Bean(resData);
//进行bean内容的处理以及list的设置与输出
OssFileBean ossFileBean;
ContentsBean[] contentsBean = listBucketResultBean.getContents();
CommonPrefixesBean[] commonPrefixesBean = listBucketResultBean.getCommonPrefixes();
if(!nowUrl.equals("")){
ossFileBean = new OssFileBean();
ossFileBean.setFileName("..");
if(nowUrl.indexOf("/")==nowUrl.lastIndexOf("/")){
ossFileBean.setToDo("openFolder('" + nowUrl.substring(nowUrl.indexOf("/")+1) + "')");
}else{
ossFileBean.setToDo("openFolder('" +
nowUrl.substring(0,nowUrl.length()-1).substring(
0,nowUrl.substring(0,nowUrl.length()-1).lastIndexOf("/"))+
"/" + "')");
}
ossFileBeanList.add(ossFileBean);
}
if(commonPrefixesBean!=null){
for(int i=0;i<commonPrefixesBean.length;i++){
ossFileBean = new OssFileBean();
if(nowUrl.equals("")){
ossFileBean.setFileName(commonPrefixesBean[i].getPrefix());
}else{
ossFileBean.setFileName(
commonPrefixesBean[i].getPrefix().substring(nowUrl.length()));
}
ossFileBean.setToDo("openFolder('" + commonPrefixesBean[i].getPrefix() + "')");
ossFileBean = OSSUtils.FoldersTODO(ossFileBean,commonPrefixesBean[i]);
ossFileBeanList.add(ossFileBean);
}
}
if(contentsBean!=null){
for(int i=0;i<contentsBean.length;i++){
if(!contentsBean[i].getKey().equals(nowUrl)){
ossFileBean = new OssFileBean();
if(nowUrl.equals("")){
ossFileBean.setFileName(
contentsBean[i].getKey());
}else{
ossFileBean.setFileName(
contentsBean[i].getKey().substring(nowUrl.length()));
}
ossFileBean.setSize(contentsBean[i].getSize());
ossFileBean.setLastModified(
contentsBean[i].getLastModified().replace("T", " ").replace(".000Z", ""));
ossFileBean.setToDo("downFile('http://reader.oss.aliyuncs.com/" + contentsBean[i].getKey() + "')");
ossFileBean = OSSUtils.FilesTODO(ossFileBean,contentsBean[i]);
ossFileBeanList.add(ossFileBean);
}
}
}
return "showlist";
}
private static void setTimeout(DefaultHttpClient http){
//设置打开链接超时时间
http.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
//设置读取数据超时超时时间
http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);
}
}