• springboot 集成oss


    集成aliyun oss

    结构如下:

     

    pom.xml

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- aliyun bigen  -->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>${aliyun.oss.version}</version>
            </dependency>
    
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- aliyun end  -->
            <!-- lombok bigen  -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!-- lombok end  -->

    application.yml

    aliyun:
      file:
        endpoint: http://oss-cn-hangzhou.aliyuncs.com
        accessKeyId: *******************
        accessKeySecret: *******************
        bucketName: tzqimg
        folder : test
        webUrl: https://tzqimg.oss-cn-hangzhou.aliyuncs.com
    
    spring:
      servlet:
        multipart:
          max-file-size: 1MB
          max-request-size: 1MB
    package com.aliyun.we;
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    
    @Data
    @Component
    @Configuration
    public class ConstantConfig  {
        @Value("${aliyun.file.endpoint}")
        private   String endpoint;
        @Value("${aliyun.file.accessKeyId}")
        private  String accessKeyId;
        @Value("${aliyun.file.accessKeySecret}")
        private  String accessKeySecret;
        @Value("${aliyun.file.folder}")
        private  String folder;
        @Value("${aliyun.file.bucketName}")
        private  String bucketName;
        @Value("${aliyun.file.webUrl}")
        private  String webUrl;
    
    }
    package com.aliyun.we;
    
    import lombok.Data;
    
    import java.io.Serializable;
    
    /**
     * @description: 文件上传信息存储类
     * @author: tzq
     * @create 2019-08-06 
     */
    @Data
    public class FileDTO implements Serializable {
    
        /**
         * 文件大小
         */
        private Long fileSize;
        /**
         * 文件的绝对路径
         */
        private String fileAPUrl;
    
        /**
         * 文件的web访问地址
         */
        private String webUrl;
    
        /**
         * 文件后缀
         */
        private String fileSuffix;
        /**
         * 存储的bucket
         */
        private String fileBucket;
    
        /**
         * 原文件名
         */
        private String oldFileName;
        /**
         * 存储的文件夹
         */
        private String folder;
    
        public FileDTO() {
        }
    
        public FileDTO(Long fileSize, String fileAPUrl, String webUrl, String fileSuffix, String fileBucket, String oldFileName, String folder) {
            this.fileSize = fileSize;
            this.fileAPUrl = fileAPUrl;
            this.webUrl = webUrl;
            this.fileSuffix = fileSuffix;
            this.fileBucket = fileBucket;
            this.oldFileName = oldFileName;
            this.folder = folder;
        }
    }
    package com.aliyun.we;
    
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.CannedAccessControlList;
    import com.aliyun.oss.model.CreateBucketRequest;
    import com.aliyun.oss.model.PutObjectRequest;
    import com.aliyun.oss.model.PutObjectResult;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.UUID;
    
    @Component
    public class AliyunOSSUtil {
        @Autowired
        private ConstantConfig constantConfig;
        private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
    
        /** 上传文件*/
        public FileDTO upLoad(File file){
            logger.info("------OSS文件上传开始--------"+file.getName());
            String endpoint=constantConfig.getEndpoint();
            System.out.println("获取到的Point为:"+endpoint);
            String accessKeyId=constantConfig.getAccessKeyId();
            String accessKeySecret=constantConfig.getAccessKeySecret();
            String bucketName=constantConfig.getBucketName();
            String fileHost=constantConfig.getFolder();
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            String dateStr=format.format(new Date());
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String suffix = file.getName().substring(file.getName().lastIndexOf(".") + 1);
            // 判断文件
            if(file==null){
                return null;
            }
            OSSClient client=new OSSClient(endpoint, accessKeyId, accessKeySecret);
            try {
                // 判断容器是否存在,不存在就创建
                if (!client.doesBucketExist(bucketName)) {
                    client.createBucket(bucketName);
                    CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                    createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                    client.createBucket(createBucketRequest);
                }
                // 设置文件路径和名称
                String fileUrl = fileHost + "/" + (dateStr + "/" + uuid ) + "-" + file.getName();
                // 设置权限(公开读)
                client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
                // 上传文件
                PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
    
                if (result != null) {
                    System.out.println(result);
                    logger.info("------OSS文件上传成功------" + fileUrl);
                    return new FileDTO(
                            file.length(),//文件大小
                            fileUrl,//文件的绝对路径
                            constantConfig.getWebUrl() +"/"+ fileUrl,//文件的web访问地址
                            suffix,//文件后缀
                            "",//存储的bucket
                            bucketName,//原文件名
                            fileHost//存储的文件夹
                    );
    
                    }
            }catch (OSSException oe){
                logger.error(oe.getMessage());
            }catch (ClientException ce){
                logger.error(ce.getErrorMessage());
            }finally{
                if(client!=null){
                    client.shutdown();
                }
            }
            return null;
        }
    }
    package com.aliyun.we;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    @RestController
    public class UpLoadController {
    
        private final Logger logger = LoggerFactory.getLogger(getClass());
    
        @Autowired
        private AliyunOSSUtil aliyunOSSUtil;
    
    
    
        /** 文件上传*/
        @RequestMapping(value = "/uploadFile")
        public FileDTO uploadBlog(@RequestParam("file") MultipartFile file) {
            logger.info("文件上传");
            String filename = file.getOriginalFilename();
            System.out.println(filename);
    
            try {
                // 判断文件
                if (file!=null) {
                    if (!"".equals(filename.trim())) {
                        File newFile = new File(filename);
                        FileOutputStream os = new FileOutputStream(newFile);
                        os.write(file.getBytes());
                        os.close();
                        file.transferTo(newFile);
                        // 上传到OSS
                        return aliyunOSSUtil.upLoad(newFile);
                    }
    
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
        }
    }

    postman 返回 

    {
        "fileSize": 190280,
        "fileAPUrl": "test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
        "webUrl": "https://tzqimg.oss-cn-hangzhou.aliyuncs.com/test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
        "fileSuffix": "png",
        "fileBucket": "",
        "oldFileName": "tzqimg",
        "folder": "test"
    }
  • 相关阅读:
    感触
    儿子会走了
    OLB(outlook bar)控件开发计划
    又要上班了
    OLB(outlook bar)控件开发计划
    将Vim打造成完美的IDE神器
    简明 Vim 练级攻略
    Java , C , C++ ,PHP, python 运算符优先级对照表
    史上最强的vimrc文件
    vim学习资料汇总
  • 原文地址:https://www.cnblogs.com/mytzq/p/11310056.html
Copyright © 2020-2023  润新知