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