阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像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,来进行查询学习,其实挺简单的。