SpringMVC文件上传

208 阅读1分钟

文件上传

  • Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler

  • SpringMVC中默认是没有装配MultipartResovler类的,如果需要使用的SpringMVC中的上传文件需要手动进行配置

1.1相关依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

1.2配置文件

配置文件上传解析类CommonsMultipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--允许上传的文件最大大小  单位是byte-->
    <property name="maxUploadSize" value="60000000"/>
  	<property name="defaultEncoding" value="UTF-8"/>
</bean>

1.3jsp前台页面

  • 一定要是post请求
  • enctype一定要写
  • input标签的name属性和Controller的参数名要一致,不然会报null
<body>
  <form method="post" action="${ctx}/upload" enctype="multipart/form-data" id="data-form" >
        <input type="file" name="uploadFile"><br>
        <button>提交</button>
    </form>
</body>

1.4Controller

  • MultipartFile 的参数名与前台的name属性一致
@RequestMapping("/insert")
	public String insertProduct(HttpServletRequest request, @RequestParam("uploadFile") MultipartFile uploadFile)
	{       //接受前台参数
		Product product=new Product();
		Map<String, String[]> parameterMap = request.getParameterMap();
		MyBeanUtils.populate(product,parameterMap);
		try {   
                        //设置路径
			product.setProductImg("pro/"+uploadFile.getOriginalFilename());
			service.addProduct(product);
			System.out.println(uploadFile.getName());//表单中的name名
			System.out.println(uploadFile.getSize());//文件大小
			System.out.println(uploadFile.getOriginalFilename());//获取文件名
			File file = new File("C:\\ideaworksspace\\ssm-demo\\src\\main\\webapp\\img\\pro\\" + uploadFile.getOriginalFilename());
			//保存文件到磁盘
			uploadFile.transferTo(file);
		} catch (Exception e) {
			e.printStackTrace();
		}
		findAll(request);
		return "goods";
	}

1.5注意

解决idea Tomcat文件上传后图片无法显示

  • 原因分析:idea有缓存,也就是target,里面没有这个资源,重启可以解决,这样很麻烦,但img包中有新上传的图片。
  • 解决方案:在tomcat里配置一下路径

image.png 选择一下要放资源的文件夹

  • 访问方式
<img src="pro/luck.png">

相应的存储图片的路径发生变化,就可以成功显示。