今天刚好看到上传附件的代码,综合以前看的代码,记录一点,也不算是收获,算是备忘吧。
参考文章链接:
首先,在web.xml中,
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/mvc-config.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
对应的mvc-config.xml中,进行配置。
在beans中,增加对文件上传的支持。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="209715200"/>
<!-- 20M -->
<!-- 要在WebContent下建立一个upload文件夹
<property name="uploadTempDir" value="upload"/>
-->
</bean>
在form表单中,只要是有, 标签用的是springmvc的form.
<input type="file" name="txtFile" class="span6" id="txtFile" />
就会有一个上传文件按钮。
这里的type,必须是file,id自己定义。
但是,id的定义,需要与后台的参数相对应。
如果后台controller方法中,只需要接收,上传文件这一个参数,写法如下(下面代码参考SpringMVC 理论与实用技术(二)文件上传):.
@RequestMapping("/upload")
public String upload(@RequestParam("txtFile") CommonsMultipartFile file ,HttpServletRequest request) throws IOException{</span>
return "success";
}
如果有其他参数,需要一同传入到controller中,写法如下:
@RequestMapping(value = "/form/upload")
public ModelAndView edit(PProductAccessoryForm form) throws Exception {
String forwardString = "product/accessory/upload";
Map<String, Object> model = new HashMap<String, Object>();
model.put("form", form);
return new ModelAndView(forwardString, model);
}
其中,参数:PProductAccessoryForm,是另一个参数类,里面封装所有的需要传入的参数,其中包括上传的文件。
public class PProductAccessoryForm extends DataTableForm<PProductAccessory> {
private String name;
private CommonsMultipartFile txtFile = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CommonsMultipartFile getTxtFile() {
return txtFile;
}
public void setTxtFile(CommonsMultipartFile txtFile) {
this.txtFile = txtFile;
}
}
还有一种,没有用,也没有验证过的方式,(下面代码参考 SpringMVC 理论与实用技术(二)文件上传):
@RequestMapping("/upload2")
public void upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException
{
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
Iterator<String> iter=multipartRequest.getFileNames();
while(iter.hasNext())
{
MultipartFile file=multipartRequest.getFile((String)iter.next());
if (file!=null) {
String filename="demo"+file.getOriginalFilename();
String path="D:/"+filename;
File localfile=new File(path);
file.transferTo(localfile);
}
}
}
}
第三种,有机会再进行验证,成功后补充博客。
这就是springMVC中,上传文件的操作了。