0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# SpringBoot 整合七牛云上传图片

SpringBoot 上传图片

获取七牛云密钥

  1. 进入七牛云控制台

    image-20220131212145277

  2. 点击【头像】→【密钥管理】

    image-20220131212100619

  3. 创建密钥,复制保存,下面要用

    image-20220131212314100

导入依赖

<!--qiniu依赖-->
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>7.2.28</version>
</dependency>
<!--thymeleaf依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

配置 application.yml

spring:
  freemarker:
    suffix: .html
    cache: false
  servlet:
    multipart:
      max-file-size: 20MB
      max-request-size: 20MB

qiniu:
  accessKey: 申请的 AccessKey,AK
  accessSecretKey: 申请的 SecretKey,SK
  bucket: 创建的空间名
  imageUrl: 域名

编写 ImageUtils

图片的上传工具类

@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.huabei());
            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;
    }
}

编写 Controller

  1. 跳转到 upload.html 的接口

    @Controller
    public class PageController {
    
       @RequestMapping("/upload")
       public String to(){
           return "upload";
       }
    
    }
  2. 图片服务接口

    @RestController
    @RequestMapping("/api")
    public class ImageController {
    
       @Autowired
       private ImageUtils imageUtils;
    
       @PostMapping("/image/upload")
       public ResponseResult uploadImage(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile){
           if(ObjectUtils.isEmpty(multipartFile)){
               return new ResponseResult(HttpResponseStatus.OK.code(), "请选择图片");
           }
           Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile);
           return new ResponseResult(HttpResponseStatus.OK.code(), "上传成功",uploadImagesUrl);
       }
    
    }

    注:ResponseResult 为响应结果封装类,自定义即可。

编写前端上传页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8002/api/image/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>
</body>

注:&lt;input type="file" name="file"&gt;的 name 值一定要和接口的 @RequestParam("file")一样

测试

  1. 访问 http://localhost:8002/upload

    image-20220131214143586

  2. 选择图片,点击提交

    image-20220131214428131

  3. 上传成功

    image-20220131214542623

  4. 查看七牛云

    image-20220131214703423

到这里就结束了,感谢大家。

举报

相关推荐

0 条评论