阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像google的大数据处理,Hadoop的思想等等,只有做出了一些成绩,起了带头羊,那么将会是非常吃香的。从今天开始简单学习了解一下阿里的各种云服务。今天先看一下OSS。

(Open)开放云存储服务,是阿里云对外的提供的海量,安全和高可靠的云存储服务。目前阿里的所有云服务都是收费,大家可以到官网上了解:http://www.aliyun.com/product/oss

 

,通俗一点理解就像是一块硬盘用来存储东西呢,只不过,它是由很多服务器,通过类似负载均衡,raid等各种技术,搭建起来的云存储,类似我们经常使用的百度云盘,360云盘等。我们可以将我们服务,数据存放上去,方便,安全,实现云。好了,简单来说,OSS,既然是存储东西用的,我们就需要学会像类似IO流对电脑硬盘操作一样,学习一下对OSS云存储的上传,删除等操作。

 

首先是开通OSS服务器后,会有endpoint,跟地址;accessKeyId,类似用户名;accessKeySecret,类似密码;buketName:第一层文件夹的名字,一个用户可以创建十个bucketName,类似于我们的C,D,E,F盘符;accessUrl,很明显用户可以通过浏览器访问的地址。例如我们上传一个html文件,我们就可以通过"accessUrl/bucketName/目录/文件名.html,来进行访问。我在这里负责一个是页面静态化的功能,将动态的JSP页面生成静态的html页面,然后上传的OSS服务器,返回地址,让用户直接访问静态页面,这样就大大加快访问的速度。这里突然想到一点不沾边的话语“物极必反,否极泰来”,最开始是单纯的静态页面,我们一直追求动态页面,现在又需要转会到静态页面,各有各的好处,所以技术这东西,没有一个好与不好,只是针对方面不同而已了。

 

 

好,首先需要我们创建一个OSS信息实体类,OSSConfigure.Java:

 

[java] 
1. import java.io.IOException;  
2. import java.util.Properties;  
3.   
4. public class OSSConfigure {  
5.   
6. private String endpoint;  
7. private String accessKeyId;  
8. private String accessKeySecret;  
9. private String bucketName;  
10. private String accessUrl;  
11.   
12. public OSSConfigure() {  
13.   
14.     }  
15.   
16. /** 
17.      * 通过配置文件.properties文件获取,这几项内容。 
18.      *  
19.      * @param storageConfName 
20.      * @throws IOException 
21.      */  
22. public OSSConfigure(String storageConfName) throws IOException {  
23.   
24. new Properties();  
25. this.getClass().getClassLoader()  
26. "conf/" + storageConfName));  
27.   
28. "endpoint").trim();  
29. "accessKeyId").trim();  
30. "accessKeySecret").trim();  
31. "bucketName").trim();  
32. "accessUrl").trim();  
33.   
34.     }  
35.   
36. public OSSConfigure(String endpoint, String accessKeyId,  
37.             String accessKeySecret, String bucketName, String accessUrl) {  
38.   
39. this.endpoint = endpoint;  
40. this.accessKeyId = accessKeyId;  
41. this.accessKeySecret = accessKeySecret;  
42. this.bucketName = bucketName;  
43. this.accessUrl = accessUrl;  
44.     }  
45.   
46. public String getEndpoint() {  
47. return endpoint;  
48.     }  
49.   
50. public void setEndpoint(String endpoint) {  
51. this.endpoint = endpoint;  
52.     }  
53.   
54. public String getAccessKeyId() {  
55. return accessKeyId;  
56.     }  
57.   
58. public void setAccessKeyId(String accessKeyId) {  
59. this.accessKeyId = accessKeyId;  
60.     }  
61.   
62. public String getAccessKeySecret() {  
63. return accessKeySecret;  
64.     }  
65.   
66. public void setAccessKeySecret(String accessKeySecret) {  
67. this.accessKeySecret = accessKeySecret;  
68.     }  
69.   
70. public String getBucketName() {  
71. return bucketName;  
72.     }  
73.   
74. public void setBucketName(String bucketName) {  
75. this.bucketName = bucketName;  
76.     }  
77.   
78. public String getAccessUrl() {  
79. return accessUrl;  
80.     }  
81.   
82. public void setAccessUrl(String accessUrl) {  
83. this.accessUrl = accessUrl;  
84.     }  
85.   
86. }

 

然后是一个工具类,这里需要提出的OSS服务器,上所有的都是对象,没有文件夹的概念,上传文件,直接写好路劲,他会自动创建。另外这里有一个入口OSSClient,很多方法都是通过它来实现的,类似于门面模式吧:


 

[java] 
1. import java.io.File;  
2. import java.io.FileInputStream;  
3. import java.io.FileNotFoundException;  
4. import java.io.InputStream;  
5.   
6. import org.springframework.web.multipart.MultipartFile;  
7.   
8. import com.aliyun.oss.OSSClient;  
9. import com.aliyun.oss.model.ObjectListing;  
10. import com.aliyun.oss.model.ObjectMetadata;  
11.   
12. /** 
13.  * 对OSS服务器进行上传删除等的处理 
14. * @ClassName: OSSManageUtil  
15. * @Description:   
16. * @author liujh 
17. * @date 2015-3-26 上午10:47:00  
18. * 
19.  */  
20. public class OSSManageUtil {  
21. /** 
22.      * 上传OSS服务器文件 
23.     * @Title: uploadFile  
24.     * @Description:  
25.     * @param @param ossConfigure 
26.     * @param @param file 
27.     * @param @param remotePath 
28.     * @param @return 
29.     * @param @throws Exception    设定文件  
30.     * @return String    返回类型  
31.     * @throws 
32.      */  
33. public static String uploadFile(OSSConfigure ossConfigure,File file,String remotePath) throws Exception{  
34. null;  
35. new FileInputStream(file);  
36.           
37. new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());  
38. 0, remotePath.length()).replaceAll("\\\\","/")+"/";  
39. //创建上传Object的Metadata  
40. new ObjectMetadata();  
41.         objectMetadata.setContentLength(fileContent.available());  
42. "no-cache");  
43. "Pragma", "no-cache");  
44. "."))));  
45. "inline;filename=" + file.getName());  
46. //上传文件  
47.         ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata);  
48. "/" +remoteFilePath + file.getName());  
49. return ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName();  
50.     }  
51.       
52.       
53. /** 
54.      * 根据key删除OSS服务器上的文件 
55.     * @Title: deleteFile  
56.     * @Description:  
57.     * @param @param ossConfigure 
58.     * @param @param filePath    设定文件  
59.     * @return void    返回类型  
60.     * @throws 
61.      */  
62. public static void deleteFile(OSSConfigure ossConfigure,String filePath){  
63. new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());  
64.         ossClient.deleteObject(ossConfigure.getBucketName(), filePath);  
65.           
66.     }  
67.       
68. /** 
69.      * Description: 判断OSS服务文件上传时文件的contentType 
70.      * @Version1.0 
71.      * @param FilenameExtension 文件后缀 
72.      * @return String  
73.      */  
74. public static String contentType(String FilenameExtension){  
75. if(FilenameExtension.equals("BMP")||FilenameExtension.equals("bmp")){return "image/bmp";}  
76. if(FilenameExtension.equals("GIF")||FilenameExtension.equals("gif")){return "image/gif";}  
77. if(FilenameExtension.equals("JPEG")||FilenameExtension.equals("jpeg")||  
78. "JPG")||FilenameExtension.equals("jpg")||     
79. "PNG")||FilenameExtension.equals("png")){return "image/jpeg";}  
80. if(FilenameExtension.equals("HTML")||FilenameExtension.equals("html")){return "text/html";}  
81. if(FilenameExtension.equals("TXT")||FilenameExtension.equals("txt")){return "text/plain";}  
82. if(FilenameExtension.equals("VSD")||FilenameExtension.equals("vsd")){return "application/vnd.visio";}  
83. if(FilenameExtension.equals("PPTX")||FilenameExtension.equals("pptx")||  
84. "PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";}  
85. if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")||  
86. "DOC")||FilenameExtension.equals("doc")){return "application/msword";}  
87. if(FilenameExtension.equals("XML")||FilenameExtension.equals("xml")){return "text/xml";}  
88. return "text/html";  
89.      }  
90. }


当然这里仅仅写了两个通用方法,我们可以在官网上下载对应的API,来进行查询学习,其实挺简单的。