阿里云服务(一) OSS
阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像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:
- 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() {
- }
- /**
- * 通过配置文件.properties文件获取,这几项内容。
- *
- * @param storageConfName
- * @throws IOException
- */
- 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;
- /**
- * 对OSS服务器进行上传删除等的处理
- * @ClassName: OSSManageUtil
- * @Description:
- * @author liujh
- * @date 2015-3-26 上午10:47:00
- *
- */
- public class OSSManageUtil {
- /**
- * 上传OSS服务器文件
- * @Title: uploadFile
- * @Description:
- * @param @param ossConfigure
- * @param @param file
- * @param @param remotePath
- * @param @return
- * @param @throws Exception 设定文件
- * @return String 返回类型
- * @throws
- */
- 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("\\\\","/")+"/";
- //创建上传Object的Metadata
- 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();
- }
- /**
- * 根据key删除OSS服务器上的文件
- * @Title: deleteFile
- * @Description:
- * @param @param ossConfigure
- * @param @param filePath 设定文件
- * @return void 返回类型
- * @throws
- */
- public static void deleteFile(OSSConfigure ossConfigure,String filePath){
- OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());
- ossClient.deleteObject(ossConfigure.getBucketName(), filePath);
- }
- /**
- * Description: 判断OSS服务文件上传时文件的contentType
- * @Version1.0
- * @param FilenameExtension 文件后缀
- * @return String
- */
- 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,来进行查询学习,其实挺简单的。
阿里云服务(一) OSS的更多相关文章
- 2018.10.9 上线发现elasticsearch写入速度超级慢,原来罪魁祸首是阿里云服务的OSS的锅
问题描述: 按照项目计划,今天上线部署日志系统(收集线上的所有日志,便于问题排查). 运维按照以前的部署过程,部署elasticsearch,部署结束之后,通过x-pack的monitor发现elas ...
- 阿里云对象存储OSS与文件存储NAS的区别
一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...
- 阿里云对象存储OSS使用 HTTPS
一.前言 阿里云对象存储oss本身也是可以用HTTPS直接访问的,但是它本身的地址是http://***.oss-cn-hangzhou.aliyuncs.com这样的,那么如果我们想使用自己的域名, ...
- 阿里云对象存储OSS
阿里云的产品种类繁多,今天让我们一起来了解下对象存储(Object Storage Service,简称OSS)吧! 什么是对象存储呢? 简单来说,对象存储OSS是阿里云提供的海量.安全和高可靠的云存 ...
- 阿里云对象存储OSS及CDN加速配置
目录 十大云存储服务商 1. 登陆阿里云官网,开通对象存储服务 OSS 2. 创建存储空间 3. 绑定自定义域名 4. 配置阿里云CDN加速 5. 购买阿里云免费SSL证书 6. 阿里云CDN配置HT ...
- 阿里云对象存储OSS访问控制
阿里云对象存储OSS的Android SDK提供了STS鉴权模式和自签名模式来保障移动终端的安全性. OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问.交 ...
- Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】
作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS 阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...
- 阿里云服务执行mysql_install_db报错
问题描述:阿里云服务执行mysql_install_db报错解决方案:安装autoconf库(yum -y install autoconf)然后在执行:mysql_install_db就会出现这样, ...
- Xshell连接阿里云服务被拒绝
问题描述:突然的Xshell连接阿里云服务被拒绝了(如图)网上众多的方案都不行例如:https://www.cnblogs.com/wanglle/p/11416987.html(参考博文,本人这个问 ...
- 使用Xshell链接阿里云服务
1.下载Xshell,进入xshell官网 https://xshell.en.softonic.com/,选择免费版本进行下载,在该页面https://www.netsarang.com/zh/fr ...
随机推荐
- 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_指针
定义pt为指向INT类型的指针,在程序中取得var_int1的地址(INT类型),然后将地址对应的数据还原给var_int2(pt^的写法) 更多教学视频和资料下载,欢迎关注以下信息: 我的优 ...
- Android学习(十六) 通过GestureDetector进行手势识别
一.手势交互过程: 1)触屏时,触发MotionEvent事件. 2)被OnTouchListener监听,在onTouch()中获得MotionEvent对象. 3)GestureDetector转 ...
- CSS——display(Block none inline等)属性的用法
在一般的CSS布局制作时候,我们常常会用到display对应值有block.none.inline这三个值.下面我们来分别来认识和学习什么时候用什么值.这里通过CSS display知识加实例.图演示 ...
- Xcode强大的多视图立体分层显示View UI Herarchy
Xcode能够显示执行页面的立体uivew结构图,能够让你看到一个页面包括哪些视图,在哪一层,在页面的什么位置. 一看就能看到你的uiview是否显示.显示在哪里了. 用鼠标点击页面移动鼠标能够看到页 ...
- 效果超赞的基于js的chat组件和图形动画组件
chat组件的地址是:http://ecomfe.github.io/echarts/doc/doc.html 图像动画组件的地址是:http://ecomfe.github.io/zrender/i ...
- 娓娓道来c指针 (2)内存分配
(2)内存分配 c语言中描写叙述变量的时候经常使用的两个用语 1.作用域:也叫可见域,指的是变量的作用范围. 在哪个范围内.该变量是可见的.能够使用的. 2.生存期:也叫存储期.指的是变量从创建到销毁 ...
- css进阶读书笔记
说明:努力在十一左右,最迟双11之前掌握所有css知识要点 一.摘自<写给大家看的CSS书(第2版)>(虽然书比较旧,09年版的,但对于我这种刚入门的小菜鸟 来说,能学到的还是挺多的) 1 ...
- Android採用async框架实现文件上传
页面效果 须要的权限 <uses-permission android:name="android.permission.INTERNET"/> 网络訪问权限; 布局文 ...
- windows下python安装Numpy、Scipy、matplotlib模块(转载)
python下载链接 Numpy下载链接 python中Numpy包的安装及使用 Numpy包的安装 准备工作 Python安装 pip安装 将pip所在的文件夹添加到环境变量path路径中 ...
- sam配置命令概要
./install_packages --enhanced_reporting katello-configure --deployment=sam --user-pass=redhat chkcon ...