SpringBoot集成七牛雲完成文件上傳


進入七牛雲(https://marketing.qiniu.com/)注冊后進入--->個人中心--->密鑰管理(如果沒有就創建一個)

 

 

 

 新建存儲空間

 

 

 新建存儲空間后  空間名就是域名,點擊域名就進入到域名鏈接

 

 

 

 

 

 

 新建完一系列之后讓我們動手敲代碼吧!!!!

導入pom.xml

     <!--七牛雲-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.11</version>
        </dependency>

 

配置yml

 

 

#七牛雲配置
# 七牛密鑰,配上自己申請的七牛賬號對應的密鑰
qiniu:
  AccessKey: 
  SecretKey: 
# 七牛空間名
  Bucket:
  BucketUrl:

 

簡單文件上傳

package com.yt.app.commons.utils;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/**
 * @ClassName UploadFileUtil
 * @Description: 上傳工具類
 * @Author gzm
 * @Date 2020/5/14 16:54
 **/
@Component
public class UploadFileUtil {
    @Value("${qiNiuYun.AccessKey}")
    private String accessKey;

    @Value("${qiNiuYun.SecretKey}")
    private String secretKey;

    @Value("${qiNiuYun.Bucket}")
    private String bucket;

    @Value("${qiNiuYun.BucketUrl}")
    private String bucketUrl;


    /**
     * 在七牛雲上保存文件
     * 返回字符串
     *
     * @param file
     * @return
     */

    public   String saveFile(MultipartFile file) throws IOException {

        //構造一個帶指定Region對象的配置類
        Configuration cfg = new Configuration(Region.huanan());
        //生成上傳憑證,然后准備上傳
        UploadManager uploadManager = new UploadManager(cfg);
        //創建權限類似於token
        Auth auth = Auth.create(accessKey,secretKey);
        //生成一個上傳的token
        String upToken = auth.uploadToken(bucket);

        int pos = file.getOriginalFilename().lastIndexOf(".");
        if (pos<0)
            return null;
        //生存文件名
        String fileExt = file.getOriginalFilename().substring(pos+1).toLowerCase();
        String fileName = UUID.randomUUID().toString().replaceAll("-","")+"."+fileExt;
        try {
            Response response = uploadManager.put(file.getBytes(), fileName, upToken);
            //解析上傳成功的結果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(bucketUrl+putRet.key+"結果");
            return bucketUrl+putRet.key;

        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            return null;
        }
    }

    public String getFileSuffix(String fileName) {
        //獲取文件后綴名
        return fileName.substring(fileName.lastIndexOf(".") + 1);
    }

//    private void checkSuffix(MultipartFile file) {
//        String suffix = getFileSuffix(file.getOriginalFilename());
//        if (!Arrays.asList(allowSuffix).contains(suffix)) {
//            logger.error("不支持的文件類型");
//
//            throw new CustomRuntimeException(ResponseInfo.ResponseInfo_700.getCode().toString(), "不支持的文件類型");
//        }
//    }

}

 

注入bean以限制大小

package com.yt.xxx.app.config;

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.MultipartConfigElement;

/**
 * @ClassName UploadConfig
 * @Description:
 * @Author gzm
 * @Date 2020/6/4 16:24
 **/
@Configuration
public class UploadConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //  單個數據大小
        factory.setMaxFileSize("2MB"); // KB,MB
        /// 總上傳數據大小
        factory.setMaxRequestSize("7MB");
        return factory.createMultipartConfig();

    }
}

 

調用即可

package com.yt.xxx.app.controller;

import com.yt.dzds.commons.model.pojo.LoginAppUser;
import com.yt.dzds.commons.result.ResponseFailure;
import com.yt.dzds.commons.result.ResponseInfo;
import com.yt.dzds.commons.result.ResponseResult;
import com.yt.dzds.commons.result.ResponseSuccess;
import com.yt.dzds.commons.utils.AppUserUtil;
import com.yt.dzds.commons.utils.FastUtils;
import com.yt.dzds.commons.utils.StringUtils;
import com.yt.dzds.commons.utils.UploadFileUtil;
import com.yt.dzds.commons.utils.exception.NoAuthorityException;
import lombok.extern.slf4j.Slf4j;
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.IOException;

/**
 * @ClassName Upload
 * @Description:
 * @Author gzm
 * @Date 2020/6/4 16:25
 **/
@RestController
@RequestMapping("upload")
@Slf4j
public class Upload {
    @Autowired
    private UploadFileUtil uploadFileUtil;

    @RequestMapping("files")
    public ResponseResult uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        //加入登錄授權
        LoginAppUser user = AppUserUtil.getLoginAppUser();
        if(null==user){
            FastUtils.checkCurrentUser(user);
        }
        long imgSize = file.getSize();
        String suffix = uploadFileUtil.getFileSuffix(file.getOriginalFilename());

        log.info("用戶上傳的圖片信息:" + file.getOriginalFilename() + "( " + suffix + " )" + "( " + imgSize + "KB )");

        // 上傳的圖片格式驗證
        // checkSuffix(file);
        String data = uploadFileUtil.saveFile(file);
        if (data != "") {
            return new ResponseSuccess<>(data);
        } else {
            return new ResponseFailure<>(ResponseInfo.ResponseInfo_610.getCode(), "保存錯誤");
        }
    }

}

 

 

大功告成,趕緊自己也去實現吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM