springmvc的文件上传比较简单,它已经将流的使用全部封装好,因此你不必知道流的使用细节就可以完成文件上传,springmvc的文件上传需要用到参数绑定的知识。
参数绑定:通俗的说就是前端表单中表单元素的name值需要跟controller中的参数名一致,或者跟在url后面的参数名需要跟controller中的参数名保持一致 eg:
http://www.lucheng.com/get?name=sss
controller:
@Getmapping("/get")
public void get(@requestParam(“参数名”) String name){}
这样就完成了简单的参数绑定,@requestParam的作用就是当你前端的参数名不想用name的时候,那么你需要跟@requestParam(“参数名”)这个注解中定义的名称相同。
文件上传配置:
xml-》
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"/> <property name="maxUploadSize" value="102400000000"/> </bean>
bean的配置中id名必须是上面的这个,否则会出现传入图片了但是后端一直提示null的错误。
controller:
@PostMapping("/upload") public ModelAndView up(@RequestParam("file") MultipartFile multipartFile)throws Exception{ if(multipartFile == null){ throw new Exception("未传入对象"); } //获取文件的名称 String name = multipartFile.getOriginalFilename(); File file1 = new File("e:\\temp\\img\\"+name); file1.mkdirs(); multipartFile.transferTo(file1); ModelAndView modelAndView = new ModelAndView("yes"); return modelAndView; }
前端表单:<input type="file" name="file">,这样就完成了文件上传,springmvc的文件上传,会将file对象表示的路径中的最后一个路径名当作数据写入的位置,这个是需要注意的,不要认为你只需要给个文件夹路径就可以了,那样文件上传虽然不会出错但是,得不到需要的结果,可以按照我上面给的路径将name去掉之后来亲自测试一下。
多文件上传: 只需要将MultipartFile设置为数组就可以了,前端多个input的name值需要相同
eg:<input type="file" name="file"> <input type="file" name="file"> <input type="file" name="file">
通过文件上传也可以知道springmvc的参数绑定的几种形式:
1. 简单类型数据的参数绑定:只需要前端提交数据的name值或者url后面跟的参数名,和controller中的参数名相同就好
2.javabean参数绑定:只需要前端提交数据的name值或者url后面跟的参数名,和controller中javabean对象的属性值相同就好
eg:
javaBean: public class user{
private int id;
private String name;
省略 getter 和setter(但是这是必须要有的)
}
controller: XXXX(user u){}
前端:input type=“text” name="id" input type=“text” name="name"
这样就完成了
3.包装类型的参数绑定:与第二种相同,但是javaBean的属性中会有另外一个类声明的对象属性
eg:
javaBean: public class user{
private int id;
private String name;
private parent p; (p中有id属性)
省略 getter 和setter(但是这是必须要有的)
}
controller: XXXX(user u){}
前端:input type=“text” name="id"
input type=“text” name="name"
input type=“text” name="p.id"
这样就完成了
4.数组的参数绑定可以参考文件上传的demo
5.集合类的参数绑定(以list为例):
controller: XXXX(list对象)
{}
前端:
input type=“text” name="list/map对象【0】/【key】";
这样就完成了