• springboot上传到阿里OSS


     阿里OSS文档

    Bucket存储空间
    Object对象或者文件
    EndpointOSS 访问域名

    更多请看 

    配置文件

    alibaba:
      cloud:
        access-key: LTAI4GAx***cmUvBy3DHmeJh
        secret-key: UHLJorhm***p9xObtSr7bprErS1t6J
        oss:
          endpoint: oss-cn-shenzhen.aliyuncs.com
          bucket: xx-hzxx
    
    @RestController
    @RequestMapping("thirdparty")
    public class OssController {
    
        @Autowired
        OSS ossClient;
    
        @Value("${alibaba.cloud.oss.endpoint}")
        private String endpoint;
    
        @Value("${alibaba.cloud.oss.bucket}")
        private String bucket;
    
        @Value("${alibaba.cloud.access-key}")
        private String accessId;
    
        @RequestMapping("/oss/policy")
        public R policy(){
    
            // host的格式为 bucketname.endpoint
            String host = "https://" + bucket + "." + endpoint;
    
            // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
            String callbackUrl = "http://88.88.88.88:8888";
    
            // 用户上传文件时指定的前缀,也就是目录
            String format = new SimpleDateFormat("YYYY-MM-dd").format(new Date());
            String dir = format;
    
            // 创建OSSClient实例,引入自动依赖注入,这里不需要再new了
            // OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
    
            Map<String, String> respMap = null;
    
            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);
    
                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));
    
          /*
          JSONObject jasonCallback = new JSONObject();
          jasonCallback.put("callbackUrl", callbackUrl);
          jasonCallback.put("callbackBody",
              "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
          jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
          String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
          respMap.put("callback", base64CallbackBody);
           */
    
            } catch (Exception e) {
                // Assert.fail(e.getMessage());
                System.out.println(e.getMessage());
            } finally {
                ossClient.shutdown();
            }
    
            return R.ok().put("data", respMap);
    
        }
    
    }
    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    JDK_win10环境下安装JDK8时点击下一步没反应的解决办法
    Pytest_在jenkins中使用allure报告(13)
    Spring Boot 实现接口幂等性的 4 种方案
    Linux yum 安装Java和MySQL
    IntelliJ IDEA 控制台中文乱码解决方案
    Linux CentOS 配置Yaf框架
    NCF 如何导入Excel数据
    NCF WebApi中 Controller的全解析
    NCF 如何通过WebApi实现前后端分离
    NCF 如何设置接口跨域访问
  • 原文地址:https://www.cnblogs.com/zongyao/p/13831086.html
Copyright © 2020-2023  润新知