Spring 4MVC下实现文件的上传下载

来源:互联网 发布:公司数据管理制度 编辑:程序博客网 时间:2024/05/16 10:11

在Spring 4MVC中实现文件的上传下载很简单,如同使用struts2实现文件上传下载一样。


首先实现单文件的上传:

  • 新建的jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>文件上传</title></head><body><form action="oneFileUpload.spring" method="post" enctype="multipart/form-data"><input type="text" name="username"/><input type="file" name="uploadFile"/><input type="submit" value="开始上传" /></form></body></html>

与其他的jsp文件没有什么不同,需要注意的是form表达需要设置一下enctype属性值为“multipart/form-data”;

  • 在SpringMVC-servlet.xml中添加通用的解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="2048000000"></property></bean>

这里bean的id一定要命名为“multipartResolver”,否则框架注入这个bean的时候会出错。这个bean的作用就是判断请求中是否有上传文件的请求。

  • 然后实现控制层

@Controllerpublic class FileUpload {@RequestMapping("/oneFileUpload")public void oneFileUpload(MultipartHttpServletRequest request,HttpServletResponse response){try{System.out.println("username = "+request.getParameter("username"));//获取将要上传的文件MultipartFile file = request.getFile("uploadFile");//获取上传文件的原名String uploadFileName = file.getOriginalFilename();//获取要上传文件的输入流InputStream isRef = file.getInputStream();String targetDir = request.getSession().getServletContext().getRealPath("/upload");//在上传的目录中创建文件File targetFile = new File(targetDir,uploadFileName);//获取文件的输出流FileOutputStream fosRef = new FileOutputStream(targetFile);//文件的复制IOUtils.copy(isRef, fosRef);}catch(Exception e) {e.printStackTrace();}}}

这里使用的是没有注解的获取上传文件的方法,还有一种是基于注解的方法,更为常用。

@Controllerpublic class FileUpload2 {@RequestMapping("/upload")public void oneFileUpload(@RequestParam String username,@RequestParam MultipartFile uploadFile,HttpServletRequest request){System.out.println("username="+username);MultipartFile file = uploadFile;String uploadFileName = file.getOriginalFilename();try {InputStream isRef = file.getInputStream();String targetDir = request.getSession().getServletContext().getRealPath("/upload");File targetFile = new File(targetDir,uploadFileName);FileOutputStream outRef = new FileOutputStream(targetFile);IOUtils.copy(isRef, outRef);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

这样就实现了单文件的上传.备注:在相应的目录下要建立上传的文件夹upload,否则会报错。


多文件的上传其实和单文件上传一样,jsp文件和配置文件就省略了,直接看控制层的代码

@Controllerpublic class MuchFileUpload {        @RequestMapping("/muchFileUpload")    public void muchFile(MultipartHttpServletRequest request){        System.out.println("username="+request.getParameter("username"));        try{            //获取将要上传的多个文件<文件名,文件>            Map<String,MultipartFile> fileMap = request.getFileMap();            System.out.println("上传的文件的数量为:"+fileMap.size());            //将键转为set            Set<String> fileSet = fileMap.keySet();            //获取set集合的迭代器            Iterator<String> fileNameIterator = fileSet.iterator();            while(fileNameIterator.hasNext()) {                String fileName = fileNameIterator.next();                System.out.println(fileName);                MultipartFile file = fileMap.get(fileName);                fileName = file.getOriginalFilename();                InputStream isRef = file.getInputStream();                String targetDir = request.getSession().getServletContext().getRealPath("/upload");                SimpleDateFormat sdf = new SimpleDateFormat("yyyy_mm_dd_hh_mm_ss");                String getDateString = sdf.format(new Date());                File targetFile = new File(targetDir,getDateString+"_"+fileName);                FileOutputStream outRef = new FileOutputStream(targetFile);                IOUtils.copy(isRef, outRef);            }        }catch(Exception e) {            e.printStackTrace();        }    }}

上面就实现了文件的上传


Spring 4MVC框架下的文件下载实现【同理配置文件以及jsp省略】

控制层的代码为:

@Controllerpublic class FileDownload {@RequestMapping("/download")public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {String name = "中文.rar";String fileName = new String(name.getBytes(),"IOS8859-1");response.setContentType("application/x-msdownload");FileInputStream fisRef = new FileInputStream(new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+name));response.setHeader("Content-Disposition", "attachment;filename="+fileName);OutputStream osRef = response.getOutputStream();IOUtils.copy(fisRef, osRef);}}

上面便实现了文件的相关操作,在这个操作中,用到了俩个JAR包,commons-fileupload.jar以及commons-io.jar。


0 0
原创粉丝点击