springmvc 之 文件上传下载

文件上传

springmvc实现文件上传的功能还需要的jar包:

  1. commons-fileupload-1.2.1.jar
  2. commons-io-2.0.jar
  3. commons-logging-1.1.3.jar

实现文件上传的步骤:

  • jsp页面的表单要为post的方式提交并且添加enctype="multipart/form-data"属性
  • 根据当前servlet的版本在springmvc的配置文件中添加bean的组件

 jsp代码:

  <form action="testFileUpload" method="post" enctype="multipart/form-data">
  	//上传的文件
    File:<input type="file" name="file">
 	<br/>
    //文件的描述
  	Desc:<input type="text" name="desc">
	<br/>
  	<input type="submit" value="submit">
  </form>

springmvc.xml

   <bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 上传文件大小上限,单位为字节(10MB) -->
        <property name="maxUploadSize">  
            <value>10485760</value>  
        </property>  
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>

Controller.java:
 

//上传文件会自动绑定到MultipartFile中
     @RequestMapping(value="/upload",method=RequestMethod.POST)
     public String upload(HttpServletRequest request,
            @RequestParam("description") String description,
            @RequestParam("file") MultipartFile file) throws Exception {

        System.out.println(description);
        //如果文件不为空,写入上传路径
        if(!file.isEmpty()) {
            //上传文件路径
            String path = request.getServletContext().getRealPath("/upload/");
            //上传文件名
            String filename = file.getOriginalFilename();
            File filepath = new File(path,filename);
            //判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) { 
                filepath.getParentFile().mkdirs();
            }
            //将上传文件保存到一个目标文件当中(transferTo是由mvc提供的把内存图片写入磁盘)
            file.transferTo(new File(path + File.separator + filename));
            return "success";
        } else {
            return "error";
        }

     }

MultipartFile的常用api:

  • byte[] getBytes():获取文件数据
  • String getContentType[]:获取文件MIME类型,如image/jpeg等
  • InputStream getInputStream():获取文件流
  • String getName():获取表单中文件组件的名字
  • String getOriginalFilename():获取上传文件的原名
  • Long getSize():获取文件的字节大小,单位为byte
  • boolean isEmpty():是否有上传文件
  • void transferTo(File dest):将上传文件保存到一个目录文件中

文件下载

文件下载由jsp提供一个a链接,该链接的带上要下载文件的文件名参数就可以了

@RequestMapping(value="/download")
     public ResponseEntity<byte[]> download(HttpServletRequest request,
             @RequestParam("filename") String filename,
             Model model)throws Exception {
        //下载文件路径
        String path = request.getServletContext().getRealPath("/images/");
        File file = new File(path + File.separator + filename);
        HttpHeaders headers = new HttpHeaders();  
        //下载显示的文件名,解决中文名称乱码问题  
        String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1");
        //通知浏览器以attachment(下载方式)打开图片
        headers.setContentDispositionFormData("attachment", downloadFielName); 
        //application/octet-stream : 二进制流数据(最常见的文件下载)。
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
                headers, HttpStatus.CREATED);  
     }

猜你喜欢

转载自blog.csdn.net/qq_37776015/article/details/81115670