SpringMVC文件上传

1.在application.yml中取消对文件上传限制

2.MultipartFile上传文件

2.1、MultipartFile接口分析

【MultipartFile接口源码】

public interface MultipartFile extends InputStreamSource {

	/**
	 * 	
	 */
	String getName();
    /**
	 * 	获取客户端上传文件的名称,包含扩展名
	 */
	@Nullable
	String getOriginalFilename();

	/**
	 * 	上传文件内容的类型
	 */
	@Nullable
	String getContentType();
    
	/**
	 * 	文件是否为空
	 */
	boolean isEmpty();

	/**
	 * 	以字节形式返回文件大小
	 */
	long getSize();

	/**
	 * 	
	 */
	byte[] getBytes() throws IOException;

	/**
	 * 	一个InputStream读取的内容,返回值类型InputStream
	 */
	@Override
	InputStream getInputStream() throws IOException;
    /**
	 * 	转存文件
	 */
	void transferTo(File dest) throws IOException, IllegalStateException;

}

 

2.2、上传文件应用

      在Controller层接受一般使用MultipartFile,因MultipartFile类是实现文件上传。MultipartFile类的getOriginalFilename()方法获取到上传文件的名称;而MultipartFile类的transferTo方法是转存文件。如果想要获取上传文件的扩展名得使用common- fileupload包下的FilenameUtils类的getExtension()方法 

我们这里是把上传功能放在service层

private static final Logger logger = LoggerFactory.getLogger(UploadService.class);

    // 支持的文件类型
    private static final List<String> suffixes = Arrays.asList("image/png", "image/jpeg");

    public String upload(MultipartFile file) {
        try {
            // 1、图片信息校验
            // 1)校验文件类型
            String type = file.getContentType();
            if (!suffixes.contains(type)) {
                logger.info("上传失败,文件类型不匹配:{}", type);
                return null;
            }
            // 2)校验图片内容
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image == null) {
                logger.info("上传失败,文件内容不符合要求");
                return null;
            }
            // 2、保存图片
            // 2.1、生成保存目录
            File dir = new File("D:\\heima\\upload");
            if (!dir.exists()) {
                dir.mkdirs();
            }
            // 2.2、保存图片
            file.transferTo(new File(dir, file.getOriginalFilename()));

            // 2.3、拼接图片地址
            String url = "http://image.leyou.com/upload/" + file.getOriginalFilename();

            return url;
        } catch (Exception e) {
            return null;
        }
    }
}

【代码中注意事项】

  • (1)MultipartFile类是spring中的类;MultipartFile类的transferTo()方法是把文件转存到磁盘;
  • (2)ImageIO判断文件是否是图片。

3.页面上的表单enctype

如果我们的页面是from表单,需要做如下设置:

一般需要在页面表单上添加属性enctype="multipart/form-data"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值