# 整合七牛云图床

# 依赖

        <!--qiniu依赖-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.28</version>
        </dependency>

# 配置

qiniu:
  accessKey: xxxx
  accessSecretKey: xxx
  bucket: xxx
  imageUrl: xxx

# 工具类

package com.base.utils;

import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
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.text.SimpleDateFormat;
import java.util.*;

@Component

public class ImageUtils {


    @Value("${qiniu.accessKey}")

    private String accessKey;


    @Value("${qiniu.accessSecretKey}")

    private String accessSecretKey;


    @Value("${qiniu.bucket}")

    private String bucket;


    @Value("${qiniu.imageUrl}")

    private String url;


  /**

     * 处理多文件

     * @param multipartFiles

     * @return

     */

    public Map<String, List<String>> uploadImages(MultipartFile[] multipartFiles){

        Map<String,List<String>> map = new HashMap<>();

        List<String> imageUrls = new ArrayList<>();

        for(MultipartFile file : multipartFiles){

            imageUrls.add(uploadImageQiniu(file));

         }

        map.put("imageUrl",imageUrls);

        return map;

    }


    /**

     * 上传图片到七牛云

     * @param multipartFile

     * @return

     */

    private String uploadImageQiniu(MultipartFile multipartFile){

        try {

            //1、获取文件上传的流

            byte[] fileBytes = multipartFile.getBytes();

            //2、创建日期目录分隔

            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

            String datePath = dateFormat.format(new Date());


            //3、获取文件名

            String originalFilename = multipartFile.getOriginalFilename();

            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

            String filename = datePath+"/"+ UUID.randomUUID().toString().replace("-", "")+ suffix;


            //4.构造一个带指定 Region 对象的配置类

            //Region.huabei(根据自己的对象空间的地址选

            Configuration cfg = new Configuration(Region.huanan());

            UploadManager uploadManager = new UploadManager(cfg);


            //5.获取七牛云提供的 token

            Auth auth = Auth.create(accessKey, accessSecretKey);

            String upToken = auth.uploadToken(bucket);

            uploadManager.put(fileBytes,filename,upToken);


            return url+filename;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

}

# 控制器

package com.base.controller;

import cn.dev33.satoken.util.SaResult;
import com.base.utils.ImageUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
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.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api")
public class ImageController {

    @Autowired
    private ImageUtils imageUtils;

    @PostMapping("/image/upload")
    @ApiOperation("上传")
    public SaResult uploadImage(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile){

        if(ObjectUtils.isEmpty(multipartFile)){
            return SaResult.ok("请选择图片");
        }
        Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile);
        return SaResult.data(uploadImagesUrl);
    }
}

# 测试页面

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>测试上传</h1>
    <form action="http://localhost:8080/api/image/upload" method="post" enctype="multipart/form-data">

        <input type="file" name="file">

        <input type="submit">

    </form>
</body>

</html>