阿里云服务(一)——OSS

转载自:http://blog.csdn.net/liujiahan629629/article/details/45290311

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

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

 

        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]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  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.         Properties prop = new Properties();  
  25.         prop.load(this.getClass().getClassLoader()  
  26.                 .getResourceAsStream("conf/" + storageConfName));  
  27.   
  28.         endpoint = prop.getProperty("endpoint").trim();  
  29.         accessKeyId = prop.getProperty("accessKeyId").trim();  
  30.         accessKeySecret = prop.getProperty("accessKeySecret").trim();  
  31.         bucketName = prop.getProperty("bucketName").trim();  
  32.         accessUrl = prop.getProperty("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]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  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.         InputStream fileContent=null;  
  35.         fileContent=new FileInputStream(file);  
  36.           
  37.         OSSClient ossClient=new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());  
  38.          String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\","/")+"/";  
  39.         //创建上传Object的Metadata  
  40.         ObjectMetadata objectMetadata=new ObjectMetadata();  
  41.         objectMetadata.setContentLength(fileContent.available());  
  42.         objectMetadata.setCacheControl("no-cache");  
  43.         objectMetadata.setHeader("Pragma""no-cache");  
  44.         objectMetadata.setContentType(contentType(file.getName().substring(file.getName().lastIndexOf("."))));  
  45.         objectMetadata.setContentDisposition("inline;filename=" + file.getName());  
  46.         //上传文件  
  47.         ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata);  
  48.         System.out.println(ossConfigure.getAccessUrl()+"/" +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.         OSSClient ossClient = 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.            FilenameExtension.equals("JPG")||FilenameExtension.equals("jpg")||     
  79.            FilenameExtension.equals("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.             FilenameExtension.equals("PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";}  
  85.         if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")||  
  86.             FilenameExtension.equals("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,来进行查询学习,其实挺简单的。

        

         反思一下吧,最近学习的少了,可能和加班有关系,更大的是自己的心态吧,调整好心态继续努力吧。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值