前言
相信大部分开发者对下面这张架构图并不陌生吧, 现在很多网站 / 应用都采用了动静分离的架构进行部署. 博主的博客也不例外, 主机采用的是阿里云的 ECS, 使用 CDN 做静态内容分发, 不过静态文件还是存储在 ECS, 采用的是 Nginx 做动静分离. 今天我们来学习一下如何使用阿里云 OSS 做动静分离.
简介
阿里云 OSS, 海量, 安全, 低成本, 高可靠的云存储服务, 提供 99.9999999999% 的数据可靠性. 使用 RESTful API 可以在互联网任何位置存储和访问, 容量和处理能力弹性扩展, 多种存储类型供选择全面优化存储成本.
产品优势
稳定可靠
OSS 作为阿里巴巴全集团数据存储的核心基础设施, 多年支撑双十一业务高峰, 历经高可用与高可靠的严苛考验. OSS 的多重冗余架构设计, 为数据持久存储提供可靠保障. 同时, OSS 基于高可用架构设计, 消除单节故障, 确保数据业务的持续性.
安全合规
支持服务端加密, 客户端加密, 防盗链, IP 黑白名单, 细粒度权限管控, 日志审计, WORM 特性, 并获得多项合规认证, 包括 SEC,FINRA 等, 满足企业数据安全与合规要求.
智能存储
提供多种数据处理能力, 如图片处理, 视频截帧, 文档预览, 图片场景识别, 人脸识别, SQL 就地查询等, 并无缝对接 Hadoop 生态, 以及阿里云函数计算, EMR,DataLakeAnalytics,BatchCompute,MaxCompute,DBS 等产品, 满足企业数据分析与管理的需求.
数据分层
提供标准, 低频, 归档多种类型, 通过生命周期自动化实现数据类型转换与过期管理, 覆盖从热到冷多种存储场景.
方便易用
提供 RESTFul API, 控制台, 多种开发语言的 SDK, 命令行工具, 图形化工具等多种使用方式, 您可以随时随地通过网络管理您的数据.
弹性扩容
支持按量付费模式, 按实际使用量付费, 无需提前一次性投入. 同时, 自动弹性扩展, 不限用户存储的容量和文件数目, 满足 EB 级海量存储需求.
整合
如题, 这里还是使用比较熟悉的 Java 语言, 阿里云官方还提供了多种 SDK, 比如 PHP,Python,Ruby,Go 等等. 首先, 我们要开通阿里云 OSS, 开通是不花钱的, 使用时才扣费.
然后创建一个存储空间 Bucket:
Pom.xml 引入最新的 SDK:
- <dependency>
- <groupId>com.aliyun.oss</groupId>
- <artifactId>aliyun-sdk-oss</artifactId>
- <version>3.6.0</version>
- </dependency>
基本上阿里大部分产品操作都需要申请一个 AccessKey, 阿里云 OSS 也不例外, 不知道怎么申请的, 去帮助中心自己找找.
application.properties 加入以下配置:
- # 阿里云存储参数配置
- aliyun.oss.flag=flase
- aliyun.oss.endpoint=http://oss-cn-qingdao.aliyuncs.com
- aliyun.oss.accessKeyId=******
- aliyun.oss.accessKeySecret=******
- aliyun.oss.bucketName=52itstyle-bed
封装工具类 AliyunOssUtil:
- /**
- * 阿里云存储
- * https://blog.52itstyle.vip
- */
- @Component
- public class AliyunOssUtil {
- @Value("${aliyun.oss.endpoint}")
- private String endpoint;
- @Value("${aliyun.oss.accessKeyId}")
- private String accessKeyId;
- @Value("${aliyun.oss.accessKeySecret}")
- private String accessKeySecret;
- @Value("${aliyun.oss.bucketName}")
- private String bucketName;
- @Value("${aliyun.oss.flag}")
- private String flag;
- private OSS ossClient;
- private OSS getInstance() {
- if(ossClient==null){
- synchronized(AliyunOssUtil.class){
- if(ossClient==null){
- ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- }
- }
- }
- return ossClient;
- }
- /**
- * 上传
- */
- public void upload(InputStream file,String fileName){
- if(SystemConstant.TRUE.equals(flag)){
- getInstance().putObject(bucketName,fileName,file);
- }
- }
- }
上传图片, 简单实例:
- /**
- * 阿里云存储
- * https://blog.52itstyle.vip
- */
- @RestController
- @RequestMapping
- public class UploadController {
- @Autowired
- private AliyunOssUtil aliyunOssUtil;
- /**
- * 文件上传
- */
- @RequestMapping("/upload")
- public Result upload(MultipartFile file) {
- try {
- String fileName = file.getOriginalFilename();
- /**
- * 修改文件名称并保存文件
- */
- String suffix = fileName.substring(fileName.lastIndexOf("."));
- String uuid = IdUtil.simpleUUID();
- fileName = uuid + suffix;
- /**
- * 入阿里云
- */
- aliyunOssUtil.upload(file.getInputStream(),fileName);
- } catch (Exception e) {
- return Result.error();
- }
- return Result.ok();
- }
- }
除此之外, SDK 还提供了追加上传, 端点续传, 分片上传以及拷贝, 删除等等 API.
阿里云 OSS 默认会生成一个图片链接地址, 如果直接在浏览器访问的话, 阿里云只提供下载功能, 但是可以嵌入到网页中使用. 生产系统中尽量使用自己的域名, 只需要在域名管理中绑定一个用户域名即可, 记得备案额.
当然, 如果你想启用 HTTPS 安全访问, 可自行上传安全证书, 阿里也有免费的证书提供支持
费用
最后, 来说一下费用问题, 阿里云 OSS 可以按量付费, 也可以购买 OSS 资源包.
存储费用: 0.12 元 / GB / 月
外网流出流量: 00:00-08:00(闲时):0.25 元 / GB 8:00-24:00(忙时):0.50 元 / GB
所有请求类型: 0.01 元 / 万次
图片处理: 每月 0-10TB: 免费 > 10TB:0.025 元 / GB
博主简单看了一下, 还是很便宜的, 对于像博主如此类型的博客, 可能一月也产生不了一顿饭的费用.
小结
总的来说, 阿里云 OSS 还是很方便的, 其提供了更加海量, 安全, 低成本, 高可靠的云存储服务. 如果不是特别敏感的文件可以尝试上云, 企业无须自建文件服务器, 不仅省去了物力成本, 还节省人力维护开销.
来源: https://www.cnblogs.com/smallSevens/p/11728749.html