zoukankan      html  css  js  c++  java
  • Spring Cloud整合Oss

    第一种方式

    关于创建账号和开通Oss步骤省略

    导入依赖:

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            </dependency>
    

    部分无关oss的配置省略

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.162.139:8848
        alicloud:
          access-key: XXXXXXXXXXXXXXXXXXXXXXXX
          secret-key: XXXXXXXXXXXXXXXXXXXXXXXX
          oss:
            endpoint: oss-cn-beijing.aliyuncs.com
    

    测试:

    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.OSSClientBuilder;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.io.ByteArrayInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class OssTest {
    
        @Autowired
        OSSClient ossClient;
    
        @Test
        public void contextLoads() throws FileNotFoundException {
    
            String bucketName = "wen-jie";
            String objectName = "my1.png";
            // 上传文件到指定的存储空间(bucketName)并将其保存为指定的文件名称(objectName)。
            String content = "C:\Users\wj\Desktop\snipaste_wj_20201012_194158.png";
            ossClient.putObject(bucketName, objectName, new FileInputStream(content));
    
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
    }
    
    

    第二种方式

    image-20201012205703560

    我们可以将所有关于oss的配置写入nacos配置中心中:

    image-20201012205804407

    bootstrap.yml配置文件

    spring.cloud.nacos.config.server-addr=192.168.162.139:8848
    spring.cloud.nacos.config.namespace=2fc98028-fd03-4e6d-9987-4be5124eea10
    
    spring.cloud.nacos.config.ext-config[0].data-id=oss.yml
    spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
    spring.cloud.nacos.config.ext-config[0].refresh=true
    

    然后新建一个controller,去获取Policy:

    @RefreshScope
    @RestController
    public class OssController {
    
        @Resource
        private OSSClient ossClient;
    
        @Value("${spring.cloud.alicloud.oss.endpoint}")
        private String endpoint;
    
        @Value("${spring.cloud.alicloud.oss.bucket}")
        private String bucket;
    
        @Value("${spring.cloud.alicloud.access-key}")
        private String accessId;
    
        @RequestMapping("/oss/policy")
        public Map<String, String> policy(){
            String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
            // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
            //String callbackUrl = "http://88.88.88.88:8888";
    
            String dir = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); // 用户上传文件时指定的前缀。
    
            // 创建OSSClient实例。
            try {
                long expireTime = 30;
                long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
                Date expiration = new Date(expireEndTime);
                // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
                PolicyConditions policyConds = new PolicyConditions();
                policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
                policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
    
                String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
                byte[] binaryData = postPolicy.getBytes("utf-8");
                String encodedPolicy = BinaryUtil.toBase64String(binaryData);
                String postSignature = ossClient.calculatePostSignature(postPolicy);
    
                Map<String, String> respMap = new LinkedHashMap<String, String>();
                respMap.put("accessid", accessId);
                respMap.put("policy", encodedPolicy);
                respMap.put("signature", postSignature);
                respMap.put("dir", dir);
                respMap.put("host", host);
                respMap.put("expire", String.valueOf(expireEndTime / 1000));
                // respMap.put("expire", formatISO8601Date(expiration));
                return respMap;
            } catch (Exception e) {
                // Assert.fail(e.getMessage());
                System.out.println(e.getMessage());
            } finally {
                ossClient.shutdown();
            }
            return null;
        }
    }
    
    

    然后我们直接访问该请求路径,就能获取到policy

    image-20201012210020406

    然后前端拿到了policy后,就可以把文件上传到oss服务器上。

  • 相关阅读:
    学习 WebService 第三步:一个简单的实例(RAD+WAS 8.5开发SOAP项目)
    学习 WebService 第二步:知识准备——WSDL文件解析
    学习 WebService 第一步:体系结构、三元素SOAP/WSDL/UDDI
    在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端
    使用 SOAPUI 测试Web Service
    HTTP 方法:GET 对比 POST
    第一个 XMLHttpRequest 例子(API)
    JAVA基础知识之JVM-——JAVA关键字
    JAVA基础知识之JVM-——使用反射生成并操作对象
    JAVA基础知识之JVM-——通过反射查看类信息
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13804931.html
Copyright © 2011-2022 走看看