阿里電子商務迄今是中國最大的電商網站,各個廠商都在去模仿。就像google的大數據處理,Hadoop的思想等等,只有作出了一些成績,起了帶頭羊,那麼將會是很是吃香的。從今天開始簡單學習瞭解一下阿里的各類雲服務。今天先看一下OSS。html
OSS(Open Storage Service)開放雲存儲服務,是阿里雲對外的提供的海量,安全和高可靠的雲存儲服務。目前阿里的全部雲服務都是收費,你們能夠到官網上了解:http://www.aliyun.com/product/ossjava
OSS,通俗一點理解就像是一塊硬盤用來存儲東西呢,只不過,它是由不少服務器,經過相似負載均衡,raid等各類技術,搭建起來的雲存儲,相似咱們常常使用的百度雲盤,360雲盤等。咱們能夠將咱們服務,數據存放上去,方便,安全,實現雲。好了,簡單來講,OSS,既然是存儲東西用的,咱們就須要學會像相似IO流對電腦硬盤操做同樣,學習一下對OSS雲存儲的上傳,刪除等操做。web
首先是開通OSS服務器後,會有endpoint,跟地址;accessKeyId,相似用戶名;accessKeySecret,相似密碼;buketName:第一層文件夾的名字,一個用戶能夠建立十個bucketName,相似於咱們的C,D,E,F盤符;accessUrl,很明顯用戶能夠經過瀏覽器訪問的地址。例如咱們上傳一個html文件,咱們就能夠經過"accessUrl/bucketName/目錄/文件名.html,來進行訪問。我在這裏負責一個是頁面靜態化的功能,將動態的JSP頁面生成靜態的html頁面,而後上傳的OSS服務器,返回地址,讓用戶直接訪問靜態頁面,這樣就大大加快訪問的速度。 這裏忽然想到一點不沾邊的話語「物極必反,否極泰來」,最開始是單純的靜態頁面,咱們一直追求動態頁面,如今又須要轉會到靜態頁面,各有各的好處,因此技術這東西,沒有一個好與很差,只是針對方面不一樣而已了。spring
好,首先須要咱們建立一個OSS信息實體類,OSSConfigure.Java:瀏覽器
- import java.io.IOException;
- import java.util.Properties;
-
- public class OSSConfigure {
-
- private String endpoint;
- private String accessKeyId;
- private String accessKeySecret;
- private String bucketName;
- private String accessUrl;
-
- public OSSConfigure() {
-
- }
-
-
- public OSSConfigure(String storageConfName) throws IOException {
-
- Properties prop = new Properties();
- prop.load(this.getClass().getClassLoader()
- .getResourceAsStream("conf/" + storageConfName));
-
- endpoint = prop.getProperty("endpoint").trim();
- accessKeyId = prop.getProperty("accessKeyId").trim();
- accessKeySecret = prop.getProperty("accessKeySecret").trim();
- bucketName = prop.getProperty("bucketName").trim();
- accessUrl = prop.getProperty("accessUrl").trim();
-
- }
-
- public OSSConfigure(String endpoint, String accessKeyId,
- String accessKeySecret, String bucketName, String accessUrl) {
-
- this.endpoint = endpoint;
- this.accessKeyId = accessKeyId;
- this.accessKeySecret = accessKeySecret;
- this.bucketName = bucketName;
- this.accessUrl = accessUrl;
- }
-
- public String getEndpoint() {
- return endpoint;
- }
-
- public void setEndpoint(String endpoint) {
- this.endpoint = endpoint;
- }
-
- public String getAccessKeyId() {
- return accessKeyId;
- }
-
- public void setAccessKeyId(String accessKeyId) {
- this.accessKeyId = accessKeyId;
- }
-
- public String getAccessKeySecret() {
- return accessKeySecret;
- }
-
- public void setAccessKeySecret(String accessKeySecret) {
- this.accessKeySecret = accessKeySecret;
- }
-
- public String getBucketName() {
- return bucketName;
- }
-
- public void setBucketName(String bucketName) {
- this.bucketName = bucketName;
- }
-
- public String getAccessUrl() {
- return accessUrl;
- }
-
- public void setAccessUrl(String accessUrl) {
- this.accessUrl = accessUrl;
- }
-
- }
而後是一個工具類,這裏須要提出的OSS服務器,上全部的都是對象,沒有文件夾的概念,上傳文件,直接寫好路勁,他會自動建立。另外這裏有一個入口OSSClient,不少方法都是經過它來實現的,相似於門面模式吧:安全
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.InputStream;
-
- import org.springframework.web.multipart.MultipartFile;
-
- import com.aliyun.oss.OSSClient;
- import com.aliyun.oss.model.ObjectListing;
- import com.aliyun.oss.model.ObjectMetadata;
-
- public class OSSManageUtil {
-
- public static String uploadFile(OSSConfigure ossConfigure,File file,String remotePath) throws Exception{
- InputStream fileContent=null;
- fileContent=new FileInputStream(file);
-
- OSSClient ossClient=new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());
- String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\","/")+"/";
-
- ObjectMetadata objectMetadata=new ObjectMetadata();
- objectMetadata.setContentLength(fileContent.available());
- objectMetadata.setCacheControl("no-cache");
- objectMetadata.setHeader("Pragma", "no-cache");
- objectMetadata.setContentType(contentType(file.getName().substring(file.getName().lastIndexOf("."))));
- objectMetadata.setContentDisposition("inline;filename=" + file.getName());
-
- ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata);
- System.out.println(ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName());
- return ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName();
- }
-
-
-
- public static void deleteFile(OSSConfigure ossConfigure,String filePath){
- OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());
- ossClient.deleteObject(ossConfigure.getBucketName(), filePath);
-
- }
-
-
- public static String contentType(String FilenameExtension){
- if(FilenameExtension.equals("BMP")||FilenameExtension.equals("bmp")){return "image/bmp";}
- if(FilenameExtension.equals("GIF")||FilenameExtension.equals("gif")){return "image/gif";}
- if(FilenameExtension.equals("JPEG")||FilenameExtension.equals("jpeg")||
- FilenameExtension.equals("JPG")||FilenameExtension.equals("jpg")||
- FilenameExtension.equals("PNG")||FilenameExtension.equals("png")){return "image/jpeg";}
- if(FilenameExtension.equals("HTML")||FilenameExtension.equals("html")){return "text/html";}
- if(FilenameExtension.equals("TXT")||FilenameExtension.equals("txt")){return "text/plain";}
- if(FilenameExtension.equals("VSD")||FilenameExtension.equals("vsd")){return "application/vnd.visio";}
- if(FilenameExtension.equals("PPTX")||FilenameExtension.equals("pptx")||
- FilenameExtension.equals("PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";}
- if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")||
- FilenameExtension.equals("DOC")||FilenameExtension.equals("doc")){return "application/msword";}
- if(FilenameExtension.equals("XML")||FilenameExtension.equals("xml")){return "text/xml";}
- return "text/html";
- }
- }
固然這裏僅僅寫了兩個通用方法,咱們能夠在官網上下載對應的API,來進行查詢學習,其實挺簡單的。服務器