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

OSS(Open 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

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

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

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

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

阿里云服务(一) OSS的更多相关文章

  1. 2018.10.9 上线发现elasticsearch写入速度超级慢,原来罪魁祸首是阿里云服务的OSS的锅

    问题描述: 按照项目计划,今天上线部署日志系统(收集线上的所有日志,便于问题排查). 运维按照以前的部署过程,部署elasticsearch,部署结束之后,通过x-pack的monitor发现elas ...

  2. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  3. 阿里云对象存储OSS使用 HTTPS

    一.前言 阿里云对象存储oss本身也是可以用HTTPS直接访问的,但是它本身的地址是http://***.oss-cn-hangzhou.aliyuncs.com这样的,那么如果我们想使用自己的域名, ...

  4. 阿里云对象存储OSS

    阿里云的产品种类繁多,今天让我们一起来了解下对象存储(Object Storage Service,简称OSS)吧! 什么是对象存储呢? 简单来说,对象存储OSS是阿里云提供的海量.安全和高可靠的云存 ...

  5. 阿里云对象存储OSS及CDN加速配置

    目录 十大云存储服务商 1. 登陆阿里云官网,开通对象存储服务 OSS 2. 创建存储空间 3. 绑定自定义域名 4. 配置阿里云CDN加速 5. 购买阿里云免费SSL证书 6. 阿里云CDN配置HT ...

  6. 阿里云对象存储OSS访问控制

    阿里云对象存储OSS的Android SDK提供了STS鉴权模式和自签名模式来保障移动终端的安全性. OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问.交 ...

  7. Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】

    作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS             阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...

  8. 阿里云服务执行mysql_install_db报错

    问题描述:阿里云服务执行mysql_install_db报错解决方案:安装autoconf库(yum -y install autoconf)然后在执行:mysql_install_db就会出现这样, ...

  9. Xshell连接阿里云服务被拒绝

    问题描述:突然的Xshell连接阿里云服务被拒绝了(如图)网上众多的方案都不行例如:https://www.cnblogs.com/wanglle/p/11416987.html(参考博文,本人这个问 ...

  10. 使用Xshell链接阿里云服务

    1.下载Xshell,进入xshell官网 https://xshell.en.softonic.com/,选择免费版本进行下载,在该页面https://www.netsarang.com/zh/fr ...

随机推荐

  1. mysql double 乘法 缺失精度

    CREATE TABLE tmp_decimal( id BIGINT auto_increment PRIMARY KEY , amount DOUBLE ); 创建测试表 插入测试数据 INSER ...

  2. 微信小程序 - 文字换行问题

    css word-break: break-all;

  3. hdu5399

    题意:给你m行个长度为 n的序列或者-1 -1代表这一行的序列不确定,然后让你找出有多少种情况满足对于每一个i 有f1(f2(⋯fm(i)))=i: 思路:分为三种情况:1,每行序列中有反复数输出0: ...

  4. git revert 后悔了 还原修改前的版本 + git 常用命令

    昨天手残 然后在GitHub for windows 上点了revert 然后就给重置了 更手残的是又给同步了 .  但是 GitHub 会保留之前的版本 . 只要删掉本次修改就可. 解决方案:  g ...

  5. Spring事务管理之声明式事务管理-基于注解的方式

    © 版权声明:本文为博主原创文章,转载请注明出处 案例 - 利用Spring的声明式事务(TransactionProxyFactoryBean)管理模拟转账过程 数据库准备 -- 创建表 CREAT ...

  6. 受防火墙影响,win7的IPV6经常Ping不通,需要手动放行

    在路由器上面设置了IPV6隧道,路由自动给每台机器分配了IPV6地址. 然后总是发现过会IPV6就ping不通了,IPV6的网站也打不开. 经从次实验发现:关闭防火墙后立马就通了,打开防火墙后,过会又 ...

  7. 使用Firebug进行断点调试详解

    利用Firebug我们可以非常方便地对网页上的任何JavaScript代码进行断点调试. 首先,使用快捷键F12在当前页面打开Firebug,并切换到脚本选项卡. 其次,我们需要为指定的js代码添加断 ...

  8. hdu 4454 Stealing a Cake(计算几何:最短距离、枚举/三分)

    题意:已知起点.圆.矩形,要求计算从起点开始,经过圆(和圆上任一点接触即可),到达矩形的路径的最短距离.(可以穿过园). 分析:没什么好的方法,凭感觉圆上的每个点对应最短距离,应该是一个凸函数,用三分 ...

  9. Android内容提供者

    一个应用中的数据库对别人是不会提供直接的访问的,而是提供接口给别人访问,但是一般应用开发的时候都是去获取别人的数据,而不是自己提供数据. 继承ContentProvider: 在Menifest中注册 ...

  10. Linux Apache安装加载mod_deflate模块

    为了开启apache服务器中的gzip压缩功能,mod_deflate模块是必须安装加载的.现在介绍如何安装.1.进入到mod_deflate.c目录 cd /lamp/httpd-2.2.20/mo ...