• Springboot集成阿里云OSS对象存储功能


    一、新建云存储微服务

    1、在service模块下创建子模块service-oss

    强行微服务...

    2、配置pom.xml

    service-oss上级模块service已经引入service的公共依赖,所以service-oss模块只需引入阿里云oss相关依赖即可

    <dependencies>
            <!-- 阿里云oss依赖 -->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
            </dependency>
    
            <!-- 日期工具栏依赖 -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
            </dependency>
        </dependencies>

    3、配置application.properties

    #服务端口
    server.port=8002
    #服务名
    spring.application.name=service-oss
    #环境设置:dev、test、prod
    spring.profiles.active=dev
    # 最大支持文件大小
    spring.servlet.multipart.max-file-size=1000MB
    # 最大支持请求大小
    spring.servlet.multipart.max-request-size=1000MB
    #阿里云 OSS
    #不同的服务器,地址不同
    aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
    aliyun.oss.file.keyid=************
    aliyun.oss.file.keysecret=***********
    #bucket可以在控制台创建,也可以使用java代码创建
    aliyun.oss.file.bucketname=edu-f
    # nacos服务地址
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    4 创建启动类

    创建OssApplication.java

    @EnableDiscoveryClient//nacos服务注册
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)  //没有配置数据库
    @ComponentScan(basePackages = {"com.atguigu"})//扫描各模块的配置类
    public class OssApplication {
        public static void main(String[] args) {
            SpringApplication.run(OssApplication.class, args);
        }
    }

    二、实现文件上传

    1、从配置文件读取常量

    创建常量读取工具类:ConstantPropertiesUtil.java ,使用@Value读取application.properties里的配置内容,用spring的 InitializingBean 的 afterPropertiesSet 来初始化配置信息,这个方法将在所有的属性被初始化后调用。
    @Component
    public class ConstantPropertiesUtils implements InitializingBean {
    
        @Value("${aliyun.oss.file.endpoint}") //读取配置文件
        private String endpoint;
    
        @Value("${aliyun.oss.file.keyid}")
        private String keyid;
    
        @Value("${aliyun.oss.file.keysecret}")
        private String keysecret;
    
        @Value("${aliyun.oss.file.bucketname}")
        private String bucketname;
    
        //定义静态常量
        public static String END_POINT;
        public static String ACCESS_KEY_ID;
        public static String ACCESS_KEY_SECRET;
        public static String BUCKET_NAME;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            END_POINT = endpoint;
            ACCESS_KEY_ID = keyid;
            ACCESS_KEY_SECRET = keysecret;
            BUCKET_NAME = bucketname;
        }
    }

    2、文件上传

    实现:FileServiceImpl.java
    参考SDK中的:Java->上传文件->简单上传->流式上传->上传文件流 https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.958.177af2eesoCeOU@Servicpublic class OssServiceImpl implements OssSerrvice     @Override
    public String uploadFileAvatar(MultipartFile file) {
            //工具类获取值
            String endpoint = ConstantPropertiesUtils.END_POINT;
            String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
            String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
            String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            InputStream inputStream = null;
            try {
                // 获取上传文件流。
                inputStream = file.getInputStream();
                //获取文件名称
                String originalFilename = file.getOriginalFilename();
                //1 在文件名称里添加随机唯一的值
                String uuid = UUID.randomUUID().toString().replaceAll("-", "");//替换掉字符串中的-
                originalFilename = uuid + originalFilename;
                //2 把文件按照日期分类
                // 获取当前日期
                String datePath = new DateTime().toString("yyyy/MM/dd");
                originalFilename = datePath + "/" + originalFilename;
                ossClient.putObject(bucketName, originalFilename, inputStream);
                // 关闭OSSClient。
                ossClient.shutdown();
                //手动拼接路径并返回
                String url = "https://" + bucketName + "." + endpoint + "/" + originalFilename;
                return url;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    3、控制层

    @RestController
    @RequestMapping("/eduoss/fileoss")
    public class OssController {
        @Autowired
        OssSerrvice ossSerrvice;
    
        @PostMapping
        public R uploadOssFile(MultipartFile file) {
            //获取上传文件 MultipartFile
            //返回上传oss的路径
            System.out.println("--------");
            String url = ossSerrvice.uploadFileAvatar(file);
            return R.ok().data("url", url);
        }
    }
  • 相关阅读:
    大数据基本概念及Hadoop技术基础
    基于 ReliefF和K-means算法的应用
    利用Hadoop和Spark处理用户心跳周期数据
    Java线程池源码解析及高质量代码案例
    muleESB的第一个开发实例-HelloWorld(二)
    [USACO11JAN]道路和飞机Roads and Planes
    CH6101 最优贸易
    POJ3662 Telephone Lines
    扫描线+线段树例题(HDU1542)
    关于Dinic算法的几点讨论
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14420320.html
Copyright © 2020-2023  润新知