• 【对象存储】SpringBoot集成华为云OBS对象存储


     总体思路是后端向华为云OBS服务器申请授权信息并设置过期时间,后端再将授权信息以Map形式发给前端,前端将文件和授权信息直接发给华为云OBS服务器。

    1. 引入依赖

    		<dependency>
                <groupId>com.huaweicloud</groupId>
                <artifactId>esdk-obs-java</artifactId>
                <version>3.20.6.1</version>
            </dependency>
            
            <dependency>
                <groupId>com.huaweicloud</groupId>
                <artifactId>esdk-obs-java-bundle</artifactId>
                <version>3.23.9</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. 向前端发送授权码

    package com.example.meetings.controller;
    
    
    import com.obs.services.ObsClient;
    import com.obs.services.model.*;
    import org.springframework.web.bind.annotation.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    /**
     * @ClassName: ObsController
     * @Description: OBS服务器Controller
     * @Author: wuhuiju
     * @Version: 1.0
     */
    @RestController
    @RequestMapping({ "/oss" })
    public class HweiYunOBSController {
    
        /**
         * 完整域名为/oss/policy
         * 返回结果
         formParams.put("x-obs-acl", "public-read");
         formParams.put("content-type", "text/plain");
         formParams.put("accessId", accessId);
         formParams.put("policy", response.getPolicy());
         formParams.put("signature", response.getSignature());
         formParams.put("dir", dir);
         formParams.put("host", host);
         */
        @CrossOrigin
        @GetMapping("/policy")
        public Map<String, Object>  policy() {
            // 访问Id
            String accessId = "************************";
    
            // 访问密钥
            String accessKey = "************************";
    
            // Endpoint
            String endpoint = "************************";
    
            // 填写Bucket名称
            String bucket = "pic";
    
            // 填写Host地址,格式为https://bucketname.endpoint。
            String host = "https://" + bucket + "." + endpoint;
    
            // 设置上传到OSS文件的前缀,可置空此项
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    
            // 生成文件夹,以日期为文件夹名
            String dateform = simpleDateFormat.format(new Date());
            String dir = "pic/" + dateform + "/";
    
            // 创建ObsClient实例
            // 使用永久AK/SK初始化客户端
            ObsClient obsClient = new ObsClient(accessId, accessKey,endpoint);
    
            try {
                // 生成基于表单上传的请求
                PostSignatureRequest request = new PostSignatureRequest();
    
                // 返回结果
                Map<String, Object> formParams = new HashMap<String, Object>();
    
                // 设置对象访问权限为公共读
                formParams.put("x-obs-acl", "public-read");
                // 设置对象MIME类型
                formParams.put("content-type", "image/jpeg");
                request.setFormParams(formParams);
    
                // 设置表单上传请求有效期,单位:秒
                request.setExpires(3600);
                PostSignatureResponse response = obsClient.createPostSignature(request);
    
                formParams.put("accessId", accessId);
                formParams.put("policy", response.getPolicy());
                formParams.put("signature", response.getSignature());
                formParams.put("dir", dir);
                formParams.put("host", host);
                return formParams;
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            return null;
        }
    }
    
    
    • 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
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
  • 相关阅读:
    软件设计师中级
    Android 按键流程
    三维图形程序员必学-CGAL几何算法
    List,Set,Map集合总结
    springBoot复杂对象表示和lombok的使用
    java实现对指定的敏感词汇进行过滤
    四天拿捏SpringSecurity?这份阿里架构师编写的理论与实战结合的学习笔记到底有多强
    SQLines数据迁移工具
    小程序中如何核销订单和优惠券
    Python程序员入职后如何做自我介绍,才能让大家记住你
  • 原文地址:https://blog.csdn.net/qq_45722630/article/details/138184434