文章目录
前言
小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。 随着互联网+的时代,在线教育技术越来越便捷,小滴课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。更多教程请访问xdclass.net(添加VX:xdclass99)
第1集 分布式文件存储业界常见解决方案介绍
简介:分布式文件存储常见解决方案介绍
目前业界比较多这个解决方案,这边就挑选几个介绍下
- MinIO
是在 Apache License v2.0 下发布的对象存储服务器,学习成本低,安装运维简单,主流语言的客户端整合都有, 号称最强的对象存储文件服务器,且可以和容器化技术docker/k8s等结合,社区活跃但不够成熟,业界参考资料较少 官网:https://docs.min.io/cn/
- FastDFS
一个开源的轻量级分布式文件系统,比较少的客户端可以整合,目前主要是C和java客户端,在一些互联网创业公司中有应用比较多,没有官方文档,社区不怎么活跃. 架构+部署结构复杂,出问题定位比较难定位,可以说是fastdfs零件的组装过程,需要去理解fastDFS的架构设计,才能够正确的安装部署
云厂商
阿里云OSS
七牛云
腾讯云
亚马逊云
CDN最强:Akamai https://www.akamai.com/cn
选云厂商理由
- 优点:开发简单,功能强大,容易维护(不同网络下图片质量、水印、加密策略、扩容、加速)
- 缺点:要钱, 个性化处理,未来转移比较复杂,不排除有些厂商会提供一键迁移工具
选开源MinIO的理由
- 优点:功能强大、可以根据业务做二次的定制,新一代分布式文件存储系统,容器化结合强大,更重要的是免费(购买磁盘、内存、带宽)
- 缺点:自己需要有专门的团队进行维护、扩容等
文件上传流程
- web控制台
- 前端->后端程序->阿里云OSS
第2集 阿里云OSS分布式对象存储介绍开通
简介:阿里云OSS对象存储介绍和开通
- 阿里云OSS介绍
对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务设计可用性不低于99.995%。
OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景:
标准存储类型 | 高持久、高可用、高性能的对象存储服务,支持频繁的数据访问。是各种社交、分享类的图片、音视频应用、大型网站、大数据分析的合适选择。 |
---|---|
低频访问存储类型 | 适合长期保存不经常访问的数据(平均每月访问频率1到2次)。存储单价低于标准类型,适合各类移动应用、智能设备、企业数据的长期备份,支持实时数据访问。 |
归档存储类型 | 适合需要长期保存(建议半年以上)的归档数据,在存储周期内极少被访问,数据进入到可读取状态需要1分钟的解冻时间。适合需要长期保存的档案数据、医疗影像、科学资料、影视素材。 |
冷归档存储类型 | 适合需要超长时间存放的极冷数据。例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等。 |
开通阿里云OSS
有阿里云账号、实名认证
开通后的操作
- 创建Bucket
- 上传文件
- 访问文件
第3集 权限知识 RBAC-ACL模式应用之阿里云RAM访问控制
简介:权限知识 RBAC-ACL模式应用之阿里云RAM访问控制
ACL: Access Control List 访问控制列表
- 以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩
- 优点:简单易用,开发便捷
- 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理
- 例子:常见的文件系统权限设计, 直接给用户加权限
RBAC: Role Based Access Control
- 基于角色的访问控制系统。权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限
- 优点:简化了用户与权限的管理,通过对用户进行分类,使得角色与权限关联起来
- 缺点:开发对比ACL相对复杂
- 例子:基于RBAC模型的权限验证框架与应用 Apache Shiro、spring Security
总结:不能过于复杂,规则过多,维护性和性能会下降, 更多分类 ABAC、PBAC等
RAM权限介绍
阿里云用于各个产品的权限,基于RBAC、ACL模型都有,进行简单管理账号、统一分配权限、集中管控资源,从而建立安全、完善的资源控制体系。
众多产品,一般采用子账号进行分配权限,防止越权攻击
建立用户,勾选编程访问(保存accessKey和accessSecret,只出现一次)
- 用户登录名称 dcloud_link@1701673122790560.onaliyun.com
AccessKey ID : LTAI5tHVGvYw7twoVFyruB1H
AccessKey Secret : r4d0EudzSvPfVMb9Zp0TfmsE32RXmN
- 用户登录名称 dcloud_link@1701673122790560.onaliyun.com
为新建用户授权OSS全部权限
第4集 阿里云OSS客户端SDK集成和上传组件功能开发
简介:阿里云OSS对象存储客户端集成和测试服务
添加阿里云OSS的SDK
添加maven依赖
- 底层聚合工程添加版本
<!-- OSS各个项目单独加依赖,根据需要进行添加--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
- 账号微服务添加
<!-- OSS各个项目单独加依赖,根据需要进行添加--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> </dependency>
账号微服务配置OSS
#阿里云OSS配置
aliyun:
oss:
endpoint: oss-cn-guangzhou.aliyuncs.com
access-key-id: LTAI5tHVGvYw7twoVFyruB1H
access-key-secret: r4d0EudzSvPfVMb9Zp0TfmsE32RXmN
bucketname: dcloud-link
- 新建配置类 (配置里面的横杠会,自动转驼峰)
@ConfigurationProperties(prefix = "aliyun.oss")
@Configuration
@Data
public class OSSConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketname;
}
开发controller
开发service
@Service
@Slf4j
public class FileServiceImpl implements FileService {
@Autowired
private OSSConfig ossConfig;
@Override
public String uploadUserImg(MultipartFile file) {
//获取相关配置
String bucketname = ossConfig.getBucketname();
String endpoint = ossConfig.getEndpoint();
String accessKeyId = ossConfig.getAccessKeyId();
String accessKeySecret = ossConfig.getAccessKeySecret();
//创建OSS对象
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取原生文件名 xxx.jpg
String originalFileName = file.getOriginalFilename();
//JDK8的日期格式
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
//拼装路径,oss上存储的路径 user/2022/12/1/sdfdsafsdfdsf.jpg
String folder = dtf.format(ldt);
String fileName = CommonUtil.generateUUID();
String extension = originalFileName.substring(originalFileName.lastIndexOf("."));
// 在OSS上的bucket下创建 user 这个文件夹
String newFileName = "user/"+folder+"/"+fileName+ extension;
try {
PutObjectResult putObjectResult = ossClient.putObject(bucketname,newFileName,file.getInputStream());
//拼装返回路径
if(putObjectResult != null){
String imgUrl = "https://"+bucketname+"."+endpoint+"/"+newFileName;
return imgUrl;
}
} catch (IOException e) {
log.error("文件上传失败:{}",e);
} finally {
//oss关闭服务,不然会造成OOM
ossClient.shutdown();
}
return null;
}
}
第5集 账号微服务头像上传阿里云OSS接口和PostMan测试
简介: 账号微服务头像上传阿里云OSS接口和PostMan测试
文件上传流程
- 先上传文件,返回url地址,再和普通表单一并提交(推荐这种,更加灵活,失败率低)
- 文件和普通表单一并提交(设计流程比较多,容易超时和失败)
注意:默认SpringBoot最大文件上传是1M,大家测试的时候记得关注下
开发controller
- @requestPart注解 接收文件以及其他更为复杂的数据类型
/**
* 上传用户头像
*
* 默认文件大小 1M,超过会报错
*
* @param file
* @return
*/
@PostMapping(value = "upload")
public JsonData uploadHeaderImg(@RequestPart("file") MultipartFile file){
String result = fileService.uploadUserHeadImg(file);
return result != null?JsonData.buildSuccess(result):JsonData.buildResult(BizCodeEnum.FILE_UPLOAD_USER_IMG_FAIL);
}