zoukankan      html  css  js  c++  java
  • SpringBoot如何优雅的将静态资源配置注入到工具类中

    引自谷粒学院项目:https://www.bilibili.com/video/av710748934/

    在工具类中,所有的属性和方法一般都是静态的,使用static修饰,但是从yml中获取属性时,不能用static修饰,所以使用如下方式解决。用常量类继承InitializingBean,把从yml中获取的非常量属性复制给static属性,并重写afterPropertiesSet方法即可优雅的解决。

    #阿里云OSS
    #不同的服务器,地址不同
    aliyun:
      oss:
        file:
          endpoint: oss-cn-shenzhen.aliyuncs.com
          keyid: xxxxxxxxxx
          keysecret: xxxxxxxx
          #bucket可以在控制台创建,也可以使用java代码创建
          bucketname: edu-guli
    
    @Component
    @ConfigurationProperties("aliyun.oss.file")
    @Data
    public class OSSConstantProperties implements InitializingBean {
        /**
         * 存储节点地址
         */
        private String endpoint;
    
        /**
         * 秘钥id
         */
        private String keyid;
    
        /**
         * 密匙
         */
        private String keysecret;
    
        /**
         * 文件夹名称
         */
        private String bucketname;
    
    
        public static String END_POINT;
    
        public static String KEY_ID;
    
        public static String KEY_SECRET;
    
        public static String BUCKET_NAME;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            END_POINT = endpoint;
            KEY_ID = keyid;
            KEY_SECRET = keysecret;
            BUCKET_NAME = bucketname;
        }
    }
    
    public interface IOssService {
    
        /**
         * 上传头像到阿里云OSS
         * @param file 头像
         * @return  头像url
         */
        String uploadFileAvatar(MultipartFile file);
    }
    
    @Service
    public class OssServiceImpl implements IOssService {
        /**
         * 上传头像到阿里云OSS
         *
         * @param file 头像
         * @return 头像url
         */
        @Override
        public String uploadFileAvatar(MultipartFile file) {
    
            String endPoint = OSSConstantProperties.END_POINT;
            String keyId = OSSConstantProperties.KEY_ID;
            String keySecret = OSSConstantProperties.KEY_SECRET;
            String bucketName = OSSConstantProperties.BUCKET_NAME;
    
            OSS ossClient = new OSSClientBuilder().build(endPoint, keyId, keySecret);
    
            try {
                //获取上传的文件输入流
                InputStream inputStream = file.getInputStream();
    
                //获取文件名称
                String filename = file.getOriginalFilename();
    
                //1.在文件名称里面添加唯一的值
                String uuid = UUID.randomUUID().toString().replace("-", "");
    
                //阿里云oss的文件名称
                filename = uuid+filename;
    
                //2 把文件按照日期进行分类
                //获取当前日期
                //   2020/5/12
                String datePath = new DateTime().toString("yyyy/MM/dd");
    
                //拼接
                filename = datePath+"/"+filename;
    
                //调用oss方法实现上传
                //第一个参数   Bucket名称
                //第二个参数   上传到oss文件路径和文件名称  aa/bb/1.jpg
                //第三个参数    上传文件输入流
    
                ossClient.putObject(bucketName,filename,inputStream);
    
                //关闭OSSClient
                ossClient.shutdown();
    
                //上传之后拼接图片的路径
                String url = new  StringBuilder("https://").append(bucketName).append(".")
                        .append(endPoint).append("/").append(filename).toString();
    
                return url;
    
            } catch (IOException e) {
                e.printStackTrace();
    
            }
            return null;
        }
    }
    
  • 相关阅读:
    ngnix+uwsgi+django 部署mezzanine
    shell三剑客之find
    Flask常见面试问题
    redis宕机如何解决?如果是项目上线的宕机呢?
    UiPath,容智Ibot在线接单,有需求的欢迎过来
    CORS和CSRF
    JWT黑名单和白名单
    Django项目常见面试问题
    降低Redis内存占用
    Redis-缓存有效期与淘汰策略
  • 原文地址:https://www.cnblogs.com/smalldong/p/14323480.html
Copyright © 2011-2022 走看看