栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot实现图片的上传

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot实现图片的上传

SpringBoot实现图片的上传 1. 创建SpringBoot项目 1.1 用到的依赖:

    org.springframework.boot
    spring-boot-starter-web



    org.springframework.boot
    spring-boot-starter-thymeleaf



    org.projectlombok
    lombok
    true

1.2 application.properties改名application.yml配置
spring:
  thymeleaf:
  	# 页面目录
    prefix: classpath:/templates/
    # 后缀名
    suffix: .html
1.3 templates文件夹下创建upload-image.html前端页面



    
    upload-img


1.4 直接上项目目录吧

2. 设计要用到的工具类
package com.xccafe.imageupload.util;
import java.util.UUID;


public class FileNameUtils {
    
    public static String getSuffix(String fileName){
        return fileName.substring(fileName.lastIndexOf("."));
    }

    
    public static String getFileName(String fileName){
        String uuid = UUID.randomUUID().toString().replace("-","");
        return uuid + getSuffix(fileName);
    }
}
package com.xccafe.imageupload.util;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;


public class FileUtils {
    
    public static Integer getImageWidth(MultipartFile multipartFile){
        try {
            BufferedImage bufferedImage = ImageIO.read(multipartFile.getInputStream());
            return bufferedImage.getWidth();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    
    public static Integer getImageHeight(MultipartFile multipartFile){
        try {
            BufferedImage bufferedImage = ImageIO.read(multipartFile.getInputStream());
            return bufferedImage.getHeight();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
3. 页面的访问方式和图片上传请求的控制层实现

首先先创建一个图片的vo类

package com.xccafe.imageupload.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class ImageVo {
    
    private Integer statusCode;
    
    private String url;
    
    private Integer width;
    
    private Integer height;

    
    public static ImageVo fail(){
        return new ImageVo(1,null,null,null);
    }

    
    public static ImageVo success(String url,Integer width,Integer height){
        return new ImageVo(0,url,width,height);
    }
}

UploadImagController.java

package com.xccafe.imageupload.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UploadImgController {
 	
    @RequestMapping("/")
    public String index(){
        return "upload-image";
    }
}

启动服务访问地址http://localhost:8080/,如下图:

选择文件后上传,会出现404,F12可以看到以下信息

接下来我们要实现图片上传的功能。

4. 实现图片上传

4.1 在此之前我们先配置一下图片上传的位置和允许上传的类型,resources目录下创建/properties/file_configuration.properties文件,

# 文件要上传保存的位置
file.localDir=E:/image/images
# 文件支持的后缀名集合(以,分隔)
file.suffixList=.jpg,.png,.gif,.jpeg

4.2 业务层创建接口UploadImageService和它的实现类UploadImageServiceImpl。

UploadImgController.java中添加以下代码

@Resource
private UploadImgService uploadImgService;


@ResponseBody
@RequestMapping("/fileUpload")
public ImageVo uploadImg(MultipartFile fileImg) throws IOException {
    return uploadImgService.uploadImg(fileImg);
}

4.3 接下来顺势实现uploadImgService.uploadImg(fileImg)方法。

package com.xccafe.imageupload.service;
import com.xccafe.imageupload.vo.ImageVo;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

public interface UploadImgService {
    
    ImageVo uploadImg(MultipartFile multipartFile) throws IOException;
}
package com.xccafe.imageupload.service.impl;

import com.xccafe.imageupload.service.UploadImgService;
import com.xccafe.imageupload.util.FileNameUtils;
import com.xccafe.imageupload.util.FileUtils;
import com.xccafe.imageupload.vo.ImageVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Service
@PropertySource("classpath:/properties/file_configuration.properties")
public class UploadImgServiceImpl implements UploadImgService {

    @Value("${file.localDir}")
    private String localDir;

    @Value("${file.suffixList}")
    private String suffix;

    @Override
    public ImageVo uploadImg(MultipartFile multipartFile) throws IOException {

        //获取原始图片名称
        String originalFilename = multipartFile.getOriginalFilename();
        originalFilename = Objects.requireNonNull(originalFilename).toLowerCase();
        //获取图片类型
        String suffixName = FileNameUtils.getSuffix(originalFilename);

        List strings = Arrays.asList(suffix.split(","));
        //不包含规定的后缀名则直接返回失败
        if (!strings.contains(suffixName)) {
            return ImageVo.fail();
        }

        //创建日期目录--yyyy/MM/dd
        String format = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
        //File对象封装文件路径
        File file = new File(localDir + "/" + format);
        //如果目录不存在创建多级目录
        if (!file.exists()) {
            boolean mkdirs = file.mkdirs();
            System.out.println("日期文件夹" + (mkdirs ? "创建成功" : "创建失败"));
        }

        //根据是否存在宽高判断是否为图片而不是恶意文件
        Integer imageWidth = FileUtils.getImageWidth(multipartFile);
        Integer imageHeight = FileUtils.getImageHeight(multipartFile);

        //uuid--文件名
        String fileName = FileNameUtils.getFileName(originalFilename);

        //文件上传
        File newFile = new File(file.getAbsolutePath()+"/"+fileName);
        multipartFile.transferTo(newFile);

        return ImageVo.success(newFile.getAbsolutePath(), imageWidth,imageHeight);
    }
}

搞完收工!选择一张图片去测试一下

上传成功!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号