springMVC中的上传操作
上传需要另外导入以下两个jar包,可以在struts2里找到。
1.commons-fileupload-1.3.1.jar
2.commons-io-2.2.jar
在springMVC的xml中的代码
<!-- 上传文件配置 --> <bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> </bean> |
Upload.java
@Controller public class FileuploadController { @RequestMapping("/upload") public ModelAndView upload(HttpServletRequest req,@RequestParam("file") CommonsMultipartFile file) throws IOException { ModelAndView mv =new ModelAndView(); //获取上传的目录 String path=req. //获得文件的输入流 InputStream is=file.getInputStream(); //输出流写入文件到上传目录 OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename())); //上传过程 int len=0; byte[] buffer=new byte[400]; while((len=is.read(buffer))!=-1) { os.write(buffer, 0, len); } //关闭资源 os.close(); is.close(); mv.setViewName("hello"); return mv; } } |
批量上传与struts2中的写法一样,把file改为数组就可以了。在上传方法中@RequestParam("file")是必须要有的否则会报错。
Jsp 页面
<form action="upload.html" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="submit" value="上传"> </form> |
SpringMVC中的下载操作
下载操作与servlet里面的下载一样,这里只写controller里的代码
Download.java
@Controller public class DownloadController {
@RequestMapping("/download") public void download(HttpServletRequest req,HttpServletResponse resp,String fileName) throws IOException { //获取文件所在路径 String path=req.getServletContext().getRealPath("/Files"); //设置文件名的编码格式,解决下载的中文文件名称乱码 String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); //输入流读取文件 File file=new File(path,fileName); InputStream is=new FileInputStream(file); //将文件写入客户端硬盘 OutputStream os=resp.getOutputStream();
resp.setCharacterEncoding("UTF-8"); resp.setHeader("Content-Disposition", "attachment;filename="+downloadFileName); //org.apache.commons.io包下的IOUtils,注意不要写错 IOUtils.copy(is, os); //关闭输入输出流 os.close(); is.close(); } } |
这种写法实测可以解决下载不了中文文件名称的文件,并且不会出现乱码等问题。