• 来吧,展示!SpringBoot OSS 整合全过程,没见过比这更详细的了


    前言

    阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.9999999999%(12 个 9),服务设计可用性(或业务连续性)不低于 99.995%。

    OSS 具有与平台无关的 RESTful API 接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

    您可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)和归档存储(Archive)作为不经常访问数据的存储方式。

    登录阿里云,进入到控制台

    点击确定,就建好了。

    1. 接下来就开始附代码
      新建一个springboot项目
      导入依赖 pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
    
       <groupId>org.example</groupId>
       <artifactId>SpringOOS</artifactId>
       <version>1.0-SNAPSHOT</version>
    
       <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <version>2.3.0.RELEASE</version>
       </dependency>
    
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
           <version>2.3.0.RELEASE</version>
       </dependency>
    
           <!-- OSS SDK 相关依赖 -->
           <dependency>
               <groupId>com.aliyun.oss</groupId>
               <artifactId>aliyun-sdk-oss</artifactId>
               <version>3.4.2</version>
           </dependency>
    
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <version>1.18.4</version>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>joda-time</groupId>
           <artifactId>joda-time</artifactId>
           <version>2.9.9</version>
       </dependency>
    
       <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-lang3</artifactId>
           <version>3.8.1</version>
       </dependency>
    
       </dependencies>
    </project>
    
    

    application.yml

    ## aliyun oss
    ## 配置说明参考: com.ljq.demo.springboot.common.config.OSSConfig.class
    oss:
       endpoint: oss-cn-shenzhen.aliyuncs.com
       url: https://oos-all.oss-cn-shenzhen.aliyuncs.com/
       accessKeyId: #这里在个人中心里accesskeys查看
       accessKeySecret: #这里在个人中心里accesskeys查看
       bucketName: #这里写OSS里自己创建的OSS文件夹
    
    

    写一个config配置类

    package com.sykj.config;
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    
    import java.io.Serializable;
    
    /**
     * @Description: 阿里云 OSS 配置信息
     * @Author: jiangpengcheng
     * @Date: 2020/07/15
     */
    @Data
    @Configuration
    public class OSSConfig implements Serializable {
    
        private static final long serialVersionUID = -119396871324982279L;
    
        /**
         * 阿里云 oss 站点
         */
        @Value("${oss.endpoint}")
        private String endpoint;
    
        /**
         * 阿里云 oss 资源访问 url
         */
        @Value("${oss.url}")
        private String url;
    
        /**
         * 阿里云 oss 公钥
         */
        @Value("${oss.accessKeyId}")
        private String accessKeyId;
    
        /**
         * 阿里云 oss 私钥
         */
        @Value("${oss.accessKeySecret}")
        private String accessKeySecret;
    
        /**
         * 阿里云 oss 文件根目录
         */
        @Value("${oss.bucketName}")
        private String bucketName;
    
    }
    
    

    工具类

    package com.sykj.util;
    
    import com.aliyun.oss.ClientConfiguration;
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.common.auth.DefaultCredentialProvider;
    import com.aliyun.oss.model.ObjectMetadata;
    import com.sykj.config.OSSConfig;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.util.UUID;
    
    /**
     * @Description: 阿里云 oss 上传工具类(高依赖版)
     * @Author: @author jiangpengcheng
     * @Date: 2020/7/15
     */
    
    public class OSSBootUtil {
    
        private OSSBootUtil(){}
    
        /**
         * oss 工具客户端
         */
        private volatile static OSSClient ossClient = null;
    
        /**
         * 上传文件至阿里云 OSS
         * 文件上传成功,返回文件完整访问路径
         * 文件上传失败,返回 null
         * @author jiangpengcheng
         * @param ossConfig oss 配置信息
         * @param file 待上传文件
         * @param fileDir 文件保存目录
         * @return oss 中的相对文件路径
         */
    
        public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir){
            initOSS(ossConfig);
            StringBuilder fileUrl = new StringBuilder();
            try {
                String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
                String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
                if (!fileDir.endsWith("/")) {
                    fileDir = fileDir.concat("/");
                }
                fileUrl = fileUrl.append(fileDir + fileName);
                System.out.println(fileUrl+"-----------------");
                ObjectMetadata objectMetadata = new ObjectMetadata();
                objectMetadata.setContentType("image/jpg");
    
                ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream(),objectMetadata);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
            fileUrl = fileUrl.insert(0,ossConfig.getUrl());
            return fileUrl.toString();
        }
    
        /**
         * 初始化 oss 客户端
         * @param ossConfig
         * @return
         */
        private static OSSClient initOSS(OSSConfig ossConfig) {
            if (ossClient == null ) {
                synchronized (OSSBootUtil.class) {
                    if (ossClient == null) {
                        ossClient = new OSSClient(ossConfig.getEndpoint(),
                                new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
                                new ClientConfiguration());
                    }
                }
            }
            return ossClient;
        }
    
        /**
         * 根据前台传过来的文件地址 删除文件
         * @author jiangpengcheng
         * @param objectName
         * @param ossConfig
         * @return
         */
        public static ResponseResult delete(String objectName,OSSConfig ossConfig) {
            initOSS(ossConfig);
            //将完整路径替换成 文件地址 因为yml里的url有了地址链接https: //oos-all.oss-cn-shenzhen.aliyuncs.com/
            // 如果再加上地址 那么又拼接了 所以删除不了 要先把地址替换为 jpc/2020-07-16/1594857669731-51d057b0-9778-4aed.png
            String fileName = objectName.replace("https://oos-all.oss-cn-shenzhen.aliyuncs.com/", "");
            System.out.println(fileName+"******************************");
            // 根据BucketName,objectName删除文件
            ossClient.deleteObject(ossConfig.getBucketName(), fileName);
    
            return ResponseResult.ok("删除成功",fileName);
        }
    }
    
    

    数据返回工具类

    package com.sykj.util;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    /**
     * @ClassName ResponseResult
     * @Description TODO
     * Author JiangPengCheng
     * Date 2020/7/15 9:13
     **/
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class ResponseResult implements Serializable {
        private Integer code;
        private String  message;
        private Object object;
    
        public static ResponseResult ok(String message){
            return new ResponseResult(200,message,null);
        }
    
        public static ResponseResult ok(String message, Object object){
            return new ResponseResult(200,message,object);
        }
    
        public static  ResponseResult error(String message){
            return new ResponseResult(500,message,null);
        }
        public static  ResponseResult error(String message, Object o){
            return new ResponseResult(500,message,o);
        }
    }
    
    

    Service类

    package com.sykj.service;
    
    import com.sykj.util.ResponseResult;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * @Description: 公共业务
     * @Author: junqiang.lu
     * @Date: 2018/12/24
     */
    public interface CommonService {
    
        /**
         * 上传文件至阿里云 oss
         *
         * @param file
         * @param
         * @return
         * @throws Exception
         */
        ResponseResult uploadOSS(MultipartFile file) throws Exception;
    
         ResponseResult delete(String objectName);
    }
    
    

    Service实现类

    package com.sykj.service.impl;
    
    import com.sykj.config.OSSConfig;
    import com.sykj.service.CommonService;
    import com.sykj.util.OSSBootUtil;
    import com.sykj.util.ResponseResult;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Description: 公共业务具体实现类
     * @Author: junqiang.lu
     * @Date: 2018/12/24
     */
    @Service("commonService")
    public class CommonServiceImpl implements CommonService {
    
        @Autowired
        private OSSConfig ossConfig;
    
        /**
         * 上传文件至阿里云 oss
         *
         * @param file
         * @param
         * @return
         * @throws Exception
         */
        @Override
    
        public ResponseResult uploadOSS(MultipartFile file) throws Exception {
    
            // 格式化时间
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
            String format = simpleDateFormat.format(new Date());
            // 高依赖版本 oss 上传工具
            String ossFileUrlBoot = null;
            /**
             * ossConfig 配置类
             * file 文件
             * "jpc/"+format 上传文件地址 加时间戳
             */
            ossFileUrlBoot = OSSBootUtil.upload(ossConfig, file, "jpc/"+format);
            System.out.println(ossFileUrlBoot);
            Map<String, Object> resultMap = new HashMap<>(16);
    //        resultMap.put("ossFileUrlSingle", ossFileUrlSingle);
            resultMap.put("ossFileUrlBoot", ossFileUrlBoot);
    
           return ResponseResult.ok("上传成功~~",ossFileUrlBoot);
        }
    
        @Override
        public ResponseResult delete(String objectName) {
            ResponseResult delete = OSSBootUtil.delete(objectName, ossConfig);
            return delete;
        }
    }
    
    

    Controller类

    package com.sykj.comtroller;
    import com.sun.org.apache.regexp.internal.RE;
    import com.sykj.service.CommonService;
    import com.sykj.util.ResponseResult;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * @Description: 公共模块控制中心
     * @Author: junqiang.lu
     * @Date: 2018/12/24
     */
    @RestController
    @RequestMapping("api/demo/common")
    public class CommonController {
    
        private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
    
        @Autowired
        private CommonService commonService;
    
        /**
         * 上传文件至阿里云 oss
         *
         * @param file
         * @param
         * @return
         * @throws Exception
         */
        @RequestMapping(value = "/upload/oss", method = {RequestMethod.POST}, produces = {MediaType.APPLICATION_JSON_VALUE})
        public ResponseResult uploadOSS(@RequestParam(value = "file") MultipartFile file) throws Exception {
            System.out.println(file.getInputStream());
    //        ResponseResult responseResult = commonService.uploadOSS(file);
    
    //        HttpHeaders headers = new HttpHeaders();
    //        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
            return ResponseResult.ok("ok");
        }
    
       @RequestMapping("/delete/oss")
        public ResponseResult deltetOss(String objectName){
           System.out.println(objectName+"-------------------------------");
           ResponseResult delete = commonService.delete(objectName);
           return delete;
       }
    
    }
    
    

    注意postman选择file

    这样就完成了

    最后

    感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

  • 相关阅读:
    [CodeForces
    [CodeChef]RIN(最小割)
    [Bzoj3894]文理分科(最小割)
    [Poj3469]Dual Core CPU(最小割)
    MySQL- 锁(3)
    MySQL- 锁(1)
    MySQL- 锁(2)
    MySQL-中文全文检索
    Solr
    多线程编程-之并发编程:同步容器
  • 原文地址:https://www.cnblogs.com/lwh1019/p/13534647.html
Copyright © 2020-2023  润新知