SpringBoot实现单,多图片上传

首先创建一个工具类ImageUtil

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class ImageUtil {
	//存放图片的绝对路径
    private final static String SAVE_IMAGE_PATH = "D:/image/";

    /**
     * 返回文件后缀
     * @param file
     * @return
     */
    public static String getImagePath(MultipartFile file) {
        String fileName = file.getOriginalFilename();//获取原文件名
        int index = fileName.indexOf(".");
        return fileName.substring(index, fileName.length());
    }

    /**
     * 保存图片
     * @param mfile
     * @param file
     * @return
     */
    public static boolean saveImage(MultipartFile mfile , File file) {
        //查看文件夹是否存在,不存在则创建
        if(!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        try {
            //使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
            mfile.transferTo(file);
            return true;
        } catch (IllegalStateException | IOException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 新文件名
     * @param suffix
     * @return
     */
    public static String getNewFileName(String suffix) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String date = sdf.format(new Date());
        return date + UUID.randomUUID() + suffix;
    }

    /**
     * 返回图片保存地址
     * @param name
     * @return
     */
    public static String getNewImagePath(String name) {
        return SAVE_IMAGE_PATH+name;
    }
}

然后写一个方法把图片进行存储以及图片所在路径添加到数据库(单图片上传)

@PostMapping(value = "/addGreat",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Map<String,Object> addArticle(PaInformation paInformation, MultipartFile mfile){
        Map<String,Object> map = new HashMap<>();
        if(paInformation == null) {
            map.put("msg", "请完整发布内容!");
            return map;
        }
        if(mfile == null) {
            map.put("msg", "没有上传缩略图!");
            return map;
        }
        //获取后缀
        String suffixName = ImageUtil.getImagePath(mfile);
        //获取新的文件名
        String newFileName = ImageUtil.getNewFileName(suffixName);
        //保存图片
        File file = new File(ImageUtil.getNewImagePath(newFileName));
        boolean state = ImageUtil.saveImage(mfile, file);
        if(state) {
            //图片保存成功
            //设置图片到对象
            paInformation.setUrl(ImageUtil.getNewImagePath(newFileName));
            //保存对象,把url保存到对应的对象中
            int row = informationService.addUrl(paInformation);
            if(row>0) {
                map.put("success", true);
                map.put("msg", "发布成功");
            }else {
                map.put("success", false);
                map.put("msg", "发布失败");
            }
        }else {
            map.put("success", false);
            map.put("msg", "图片上传失败");
        }

        return map;
    }

多图片上传

@RequestMapping("/addimage")
	public Map<String,Object> addimage(MultipartFile[] files){
		Map<String,Object> map = new HashMap<>();
		List<String> list = new ArrayList<>();
		for(int i = 0;i<files.length;i++) {
			MultipartFile mfile = files[i];
			//获取文件后缀
			String suffixName = ImageUtil.getImagePath(mfile);
			//生成新文件名称
			String newFileName = ImageUtil.getNewFileName(suffixName);
			//保存文件
			File file = new File(ImageUtil.getNewImagePath(newFileName));
			boolean state = ImageUtil.saveImage(mfile, file);
			if(state) {
				list.add(ImageUtil.getNewImagePath(newFileName));
			}
		}
		map.put("imgList", list);
		return map;
		
	}

注意: 前端需要把form转为formdata格式上传
注意: 请求里的 consumes = MediaType.MULTIPART_FORM_DATA_VALUE 也很重要,不加的话接受的mfile可能为空
原文作者:https://blog.youkuaiyun.com/tengchengbaba/article/details/109289045

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值