• SpringBoot集成-阿里云对象存储OSS



    阿里云 OSS 介绍

    阿里云对象存储 OSS (Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS,你可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。

    在这里插入图片描述

    准备工作

    在这里插入图片描述
    在这里插入图片描述

    1. 登录阿里云后进入阿里云控制台首页选择 对象存储 OSS 服务

    在这里插入图片描述

    1. 开通服务

    2. 创建Bucket

    在这里插入图片描述

    填写 bucket 名称 & 选存储空间归属的地域 & 选择读写权限为(公共读

    在这里插入图片描述
    4. 获取密钥

    在这里插入图片描述

    创建 AccessKey

    在这里插入图片描述

    保存 AccessKey ID 和 AccessKey Secret

    在这里插入图片描述

    SpringBoot 集成 OSS

    可以参考 官网 SDK 文档

    1. 导入 maven 坐标
    <dependency>
    	<groupId>com.aliyun.ossgroupId>
    	<artifactId>aliyun-sdk-ossartifactId>
    	<version>${aliyun.sdk.oss}version>
    dependency>
    <dependency>
        <groupId>javax.xml.bindgroupId>
        <artifactId>jaxb-apiartifactId>
        <version>${jaxb-api}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果是 Java 9 及以上版本,还需要导入其他坐标

    1. 在 yml 中添加配置

    在这里插入图片描述

    对应的配置类

    在这里插入图片描述

    1. 编写 AliOssUtil
    @Data
    @AllArgsConstructor
    @Slf4j
    public class AliOssUtil {
    
        private String endpoint;
        private String accessKeyId;
        private String accessKeySecret;
        private String bucketName;
    
        /**
         * 文件上传
         *
         * @param bytes
         * @param objectName
         * @return
         */
        public String upload(byte[] bytes, String objectName) {
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // 创建PutObject请求。
                ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
    
            //文件访问路径规则 https://BucketName.Endpoint/ObjectName
            StringBuilder stringBuilder = new StringBuilder("https://");
            stringBuilder
                    .append(bucketName)
                    .append(".")
                    .append(endpoint)
                    .append("/")
                    .append(objectName);
    
            log.info("文件上传到:{}", stringBuilder.toString());
    
            return stringBuilder.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    1. 配置 OSS Configuration
    /**
     * 配置类,用于创建AliOssUtil对象
     */
    @Configuration
    @Slf4j
    public class OssConfiguration {
    
        @Bean
        @ConditionalOnMissingBean
        public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
    
            log.info("开始创建阿里云文件上传工具类对象:{}", aliOssProperties);
            return new AliOssUtil(aliOssProperties.getEndpoint(),
                    aliOssProperties.getAccessKeyId(),
                    aliOssProperties.getAccessKeySecret(),
                    aliOssProperties.getBucketName());
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. 编写通用上传文件接口
    /**
     * 通用接口
     */
    @RestController
    @RequestMapping("/admin/common")
    @Api(tags = "通用接口")
    @Slf4j
    public class CommonController {
    
        @Autowired
        private AliOssUtil aliOssUtil;
    
        @PostMapping("/upload")
        @ApiOperation("文件上传")
        public Result<String> upload(MultipartFile file){
            log.info("文件上传:{}", file);
    
            try {
                // 原始文件名
                String originalFilename = file.getOriginalFilename();
                // 后缀
                String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
                String objectName = UUID.randomUUID().toString() + extension;
                // 文件的请求路径
                String filePath = aliOssUtil.upload(file.getBytes(), objectName);
                return Result.success(filePath);
            } catch (IOException e) {
                log.error("文件上传失败:{}", e);
            }
    
            return Result.error(MessageConstant.UPLOAD_FAILED);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    1. 上传文件到 OSS

    从前端调用上面的上传文件的接口,就可以将文件上传到 OSS 上,并且获取到访问 OSS 文件路径的 URL 地址。

  • 相关阅读:
    什么是知识付费?未来的发展趋势如何?
    数据分享|R语言分析上海空气质量指数数据:kmean聚类、层次聚类、时间序列分析:arima模型、指数平滑法...
    《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——Slider滑块
    HJ107 求解立方根
    ChatGPT是否可以协助人们提高公共演讲和表达能力?
    教程:创建由以太坊支持的 Web3 聊天
    APP盾的防御机制及应用场景
    HCIP--网络笔记(1)
    契约锁电子签助力拍卖业务网上签约,保全证据、不可抵赖,成交快
    软件工程概述
  • 原文地址:https://blog.csdn.net/qq_46456049/article/details/134218042