当前位置:   article > 正文

阿里云OSS存储_阿里oss存储csdn

阿里oss存储csdn

阿里云OSS存储服务

        小编最近学习中遇到公司业务需要将附件存放在阿里云OSS存储服务器中,接下来就给大家简单介绍讲解一下OSS存储的介绍,用法和JAVA SpringBoot 项目的使用和代码实现。

        有不足的地方欢迎大家评论区留言,一起进步。

引言

1.什么是阿里云OSS存储

        阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。多种存储类型供选择,全面优化存储成本。

优点:

        安全性:阿里云OSS支持多种加密算法,能将用户数据进行加密存储,确保数据的保密性。同时,它还支持身份认证和权限控制功能,可以精确地控制用户对数据的访问权限。

        可靠性:阿里云OSS基于阿里云自研的分布式系统架构,能自动将数据复制到不同的存储节点,使其具备高可靠性。即使某个存储节点发生故障,阿里云OSS也能自动切换到其他存储节点,保证数据的完整性。

        高性能:阿里云OSS的访问速度快,可以为用户提供高性能的服务。它支持全球加速,能够将数据缓存在全球各地,实现全球负载均衡,提升访问速度。

2.开通OSS存储服务功能

2-1.登录阿里云平台,完成实名认证。

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

2-2.开通OSS存储服务

进入阿里云首页后再左上角产品处进行搜索 oss 打开

点击管理控制台

新建一个Bucket节点

新建成功后进入你的节点,这里就是存放上传的对象信息

点击概览查看节点信息

2-3.创建子账户

点击accessKey管理

注意:

        继续使用AccessKey:选择这里使用的是你的当前登录的总账号,如有泄露则其他服务也会一起受影响(不推荐使用)

        开始使用子账户:创建一个新的子账户,进行授权值针对于OSS存储服务

 

 点击创建账户,进入创建账户界面

 点击确定后会进行账户验证

注意:AccessKey ID,AccessKey Secret 务必妥善保管(只有在创建账户时候回显示,后面无法进行查看,自己找地方记住放好)

        AccessKey ID:相当于你的子账户用户名

        AccessKey Secret:相当于你的子账户密码

此时你的子账户已经创建成功。

2-4.给子账户添加OSS权限

 点击确定,完成后在此查看此时账户已经存在OSS存储服务权限

 阿里云OSS对象存储配置已经结束了,接下来就是大家期待的代码实现

代码实现

1.找到官方文档,参考官方文档进行开发

2.使用idea或者别的软件创建一个java项目

我这边使用的是idea 创建springboot项目,根据个人喜好

2-1导入依赖

 如果你的 jdk版本是9及以上的选择下面的

我这边使用的是 jdk1.8 版本 springboot 为 2.3.7.RELEASE

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.7.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter</artifactId>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-test</artifactId>
  19. <scope>test</scope>
  20. </dependency>
  21. <!--lombok-->
  22. <dependency>
  23. <groupId>org.projectlombok</groupId>
  24. <artifactId>lombok</artifactId>
  25. </dependency>
  26. <!--阿里云OSS云存储服务-->
  27. <dependency>
  28. <groupId>com.aliyun.oss</groupId>
  29. <artifactId>aliyun-sdk-oss</artifactId>
  30. <version>3.15.1</version>
  31. </dependency>
  32. </dependencies>
2-2.创建工具类

下面的信息最好是放在 resources下的yml文件中,运行项目读取使用

  1. @Slf4j
  2. @Component
  3. public class OSSUtils {
  4. //云存储oss的阿里云账户 AccessKey
  5. private static final String access_key = "你自己保存的AccessKey";
  6. //云存储oss的阿里云账户 AccessKeySecret
  7. private static final String access_key_secret = "你自己保存的AccessKeySecret";
  8. //地域节点
  9. private static final String endpoint = "上面外网访问的地域节点";
  10. //oss存储节点名称
  11. private static final String bucket_name = "你自己的存储节点名称";
  12. }

开始参考官方文档进行简单上传

赋值官方文档的上传或者使用下面我个人更改过得亦可

2-2-1.上传
  1. @Slf4j
  2. @Component
  3. public class OSSUtils {
  4. /*
  5. * @阿里云 OSS存储 : 上传附件
  6. * */
  7. public Map<String, String> up_file(MultipartFile file) {
  8. Map<String, String> map = new HashMap<>();
  9. //获取原附件名
  10. String filename = file.getOriginalFilename();
  11. //截取原附件后缀
  12. String suffex = filename.substring(filename.lastIndexOf("."));
  13. // 设置上传到OSS文件的分包路径,可置空此项。置空后,文件将上传至Bucket的根目录下。
  14. String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  15. String dir = format + "/";
  16. //防止上传附件覆盖 - 使用uuid
  17. String uuid = UUID.randomUUID().toString().replace("-", "");
  18. String url_file_name = dir + uuid + suffex;
  19. /*
  20. * host(杭州)为例,其它Region请按实际情况填写。
  21. * 填写Host名称,格式为 https://sling-guli-mall.oss-cn-nanjing.aliyuncs.com/gd.jpg
  22. * */
  23. String host = "https://" + bucket_name + "." + endpoint;//可有可无
  24. // 创建OSSClient实例。
  25. OSS oss_client = new OSSClientBuilder().build(endpoint, access_key, access_key_secret);
  26. // 获取上传文件的输入流
  27. InputStream inputStream = null;
  28. try {
  29. inputStream = file.getInputStream();
  30. } catch (IOException e) {
  31. throw new CustomException("oss存储附件输入流异常:" + e);
  32. }
  33. //调用OSS方法实现上传
  34. oss_client.putObject(bucket_name, url_file_name, inputStream);
  35. // 关闭OSSClient
  36. oss_client.shutdown();
  37. //把上传之后文件路径返回
  38. //需要把上传到阿里云oss路径手动拼接出来,返回前端或者保存数据库以便后续访问
  39. String url = "https://" + bucket_name + "." + endpoint + "/" + url_file_name;
  40. map.put("uuid_name", uuid + suffex);
  41. map.put("url_name", url_file_name);
  42. map.put("url", url);
  43. return map;
  44. }
  45. }
2-2-2.删除
  1. @Slf4j
  2. @Component
  3. public class OSSUtils {
  4. /*
  5. * @阿里云 OSS存储 : 删除附件
  6. * */
  7. public boolean del_file(String file_name) {
  8. // 创建OSSClient实例。
  9. OSS oss_client = new OSSClientBuilder().build(endpoint, access_key, access_key_secret);
  10. try {
  11. oss_client.deleteObject(bucket_name, file_name);
  12. } catch (Exception e) {
  13. log.info("阿里云 oss 存储删除附件异常 -> {}", e);
  14. throw new CustomException("删除附件异常!");
  15. } finally {
  16. oss_client.shutdown();
  17. }
  18. log.info("阿里云 oss 存储删除附件 ok");
  19. return true;
  20. }
  21. }

 2-2-3.下载

注意:下载附件时要确保你本地保存附件路径存在,不存在则手动创建或代码创建文件夹,我这里采用的是代码自动判断创建

  1. @Slf4j
  2. @Component
  3. public class OSSUtils {
  4. /*
  5. * @阿里云 OSS存储 : 下载附件
  6. * 注意: 下载附件时先判断附件保存路径的文件夹是否存在,不存在则先去创建保存路径文件夹
  7. * */
  8. public boolean download_file(String file_name, String url) {
  9. // 创建OSSClient实例。
  10. OSS oss_client = new OSSClientBuilder().build(endpoint, access_key, access_key_secret);
  11. // 转换路径中的 \ -> /
  12. url= url.replace("\\","/");
  13. //判断路径末尾是否存在 / 不存在则添加一个
  14. if (url.length() - 1 != url.lastIndexOf("/")) {
  15. url = url + "/";
  16. }
  17. //截取附件名称前面的路径地址
  18. String substring = file_name.substring(0, file_name.indexOf("/"));
  19. //文件夹不存在则创建文件夹
  20. String ins_url = url + substring + "/";
  21. File file = new File(ins_url);
  22. if (!file.exists()){
  23. try {
  24. file.mkdir();
  25. }catch (Exception e){
  26. e.fillInStackTrace();
  27. }
  28. }
  29. //下载附件的 完整路径
  30. String over_url = url + file_name;
  31. try {
  32. //附件下载
  33. oss_client.getObject(new GetObjectRequest(bucket_name, file_name), new File(over_url));
  34. } catch (Exception e) {
  35. log.info("阿里云 oss 存储下载附件异常 -> {}", e);
  36. throw new CustomException("下载附件异常!");
  37. } finally {
  38. oss_client.shutdown();
  39. }
  40. log.info("阿里云 oss 存储下载附件 ok");
  41. return true;
  42. }
  43. }

3.编写实现接口以及实现服务类

3-1.controller
  1. @RestController
  2. @RequestMapping("/utils")
  3. public class UtilsController {
  4. @Resource
  5. private UtilsService utilsService;
  6. @ApiOperation("阿里云oss上传附件")
  7. @PostMapping("/aliyu_oss_up_file")
  8. public DateCode aliyu_oss_up_file(@RequestParam("file") MultipartFile multipartFile){
  9. return utilsService.aliyu_oss_up_file(multipartFile);
  10. }
  11. @ApiOperation("阿里云oss删除附件")
  12. @GetMapping("/aliyu_oss_del_file")
  13. public DateCode aliyu_oss_del_file(String fileName){
  14. return utilsService.aliyu_oss_del_file(fileName);
  15. }
  16. @ApiOperation("阿里云oss下载附件")
  17. @PostMapping("/aliyu_oss_del_file")
  18. public DateCode aliyu_oss_down_file(@RequestParam("fileName") String fileName,@RequestParam("url") String url){
  19. return utilsService.aliyu_oss_download_file(fileName,url);
  20. }
  21. }
3-2.service
  1. public interface UtilsService {
  2. DateCode aliyu_oss_up_file(MultipartFile multipartFile);
  3. DateCode aliyu_oss_del_file(String fileName);
  4. DateCode aliyu_oss_download_file(String fileName, String url);
  5. }

3-3.service-impl

        参数校验,返回值校验等校验规则我这边就不展示了(显得臃肿),根据自己的业务去做判断即可。

  1. @Slf4j
  2. @Service
  3. public class UtilsServiceImpl implements UtilsService {
  4. //使用注解注入依赖
  5. @Resource
  6. private OSSUtils ossUtils;
  7. @Override
  8. public DateCode aliyu_oss_up_file(MultipartFile multipartFile) {
  9. Map<String, String> map = ossUtils.up_file(multipartFile);
  10. map.put("size",multipartFile.getSize());
  11. return DateCode.success("OSS存储上传附件成功", map);
  12. }
  13. @Override
  14. public DateCode aliyu_oss_del_file(String fileName) {
  15. boolean b = ossUtils.del_file(fileName);
  16. if (!b) {
  17. return DateCode.error("OSS存储删除附件失败");
  18. }
  19. return DateCode.success("OSS存储删除附件成功");
  20. }
  21. @Override
  22. public DateCode aliyu_oss_download_file(String fileName, String url) {
  23. boolean b = ossUtils.download_file(fileName, url);
  24. if (!b) {
  25. return DateCode.error("OSS存储下载附件失败");
  26. }
  27. return DateCode.success("OSS存储下载附件成功");
  28. }
  29. }

测试

可使用 Swagger 在浏览器自行测试
我这边使用的测试软件是Postmain

1.启动项目打开测试工具

2.填写测试信息

3.选择附件发起调用接口

4.复制地址去浏览器访问即可

 接下来的删除,下载接口自行测试,这边就不给大家一一测试了

 其他

想要学习更多技能可参考阿里云官方文档进行学习,欢迎大家留言,指出不足。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/379466
推荐阅读
相关标签
  

闽ICP备14008679号