springMVC的文件上传于下载

springMVC的文件上传于下载

1、springmvc 文件的上传也是借助于两个工具所以需要添加两个jar

   apache-commons-fileupload.jar

   apache-commons-io.jar

2、在spring-servlet.xml中添加文件上传的处理bean的配置。

<bean id="multipartResolver"

   class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

      <property name="defaultEncoding"value="utf-8" /><!-- 默认编码 (ISO-8859-1) -->

     <property name="maxInMemorySize"value="10240" /><!-- 最大内存大小 (10240) -->

      <property name="uploadTempDir"value="/temp/" /><!--(临时文件存储目录上传后的目录名(WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE) -->

      <property name="maxUploadSize"value="-1" /><!-- 最大文件大小,-1为无限止(-1) -->

   </bean>

   其中属性<property name="uploadTempDir" value="/temp/" />

   的配置配置的是临时文件目录,spring会将文件先传到临时文件,然后我们再调用对应的API将临时文件写到目标文件。

3、编写上传文件的controller

   3.1上传一个文件

   直接在处理的方法中设置形参@RequestParam("file") CommonsMultipartFile  file

   注意这里的参数必须使用@RequestParam指定。

   然后调用方法file.getFileItem().write(targetFile);将临时文件写出到目标文件。

示例:

/**

    * 上传一个文件

    * @param name

    * @param file

    * @param session

    * @return

    */

   @RequestMapping(value="/upload.do",method=RequestMethod.POST)

   public String fileUpLoad(String name,@RequestParam("file")CommonsMultipartFile  file,HttpSessionsession){

      if(!file.isEmpty()){

        String path = session.getServletContext().getRealPath("/upload/");

        String fileName = file.getOriginalFilename();

        String fileType = fileName.substring(fileName.lastIndexOf("."));

        File targetFile = new File(path,new Date().getTime()+fileType);

        try {

           file.getFileItem().write(targetFile);

        catch (Exception e) {

           e.printStackTrace();

        }

      }

      return"showData";

   }

   3.2上传多个文件

   上传多个文件时,其实和上传一个文件一样,只是将形参改为@RequestParam("file") CommonsMultipartFile[]  file

   然后我们只需在方法中循环处理这些文件即可。

示例:

/**

    * 上传多个文件

    * @param name

    * @param files

    * @param session

    * @return

    */

   @RequestMapping(value="/mupload.do",method=RequestMethod.POST)

   public String muFileUpLoad(String name,@RequestParam("file")CommonsMultipartFile[] files,HttpSessionsession){

      if(files!=null && files.length>0){

        String path = session.getServletContext().getRealPath("/upload/");

        for (CommonsMultipartFile file : files) {

           String fileName = file.getOriginalFilename();

           String fileType = fileName.substring(fileName.lastIndexOf("."));

           File targetFile = new File(path,new Date().getTime()+fileType);

           try {

              file.getFileItem().write(targetFile);

           catch (Exception e) {

              e.printStackTrace();

           }

        }

       

      }

      return"showData";

   }

4、文件下载

   文件下载其实和spring没关系,还是使用最普通的方式实现下载即可,在这里不赘述。

示例:

/**

    * 文件下载

    * @param session

    * @param response

    * @param fileName

    * @param isOnline

    * @throws Exception

    */

   @RequestMapping(value="/downLoad.do",method=RequestMethod.GET)

   publicvoid downLoad(HttpSession session,HttpServletResponseresponse,String fileName,booleanisOnline)throws Exception{

      String path = session.getServletContext().getRealPath("/upload/")+"\\"+fileName;

      File file = new File(path);

      System.out.println(path);

      if(!file.exists()){

        response.sendError(404, "您要下载的文件没找到");

        return;

      }

      BufferedInputStream bufIn = new BufferedInputStream(newFileInputStream(file));

      byte [] buff = newbyte[1024];

      int len = -1;

      response.reset();

      if(isOnline){

        URL u = new URL("file:///"+path);

        response.setContentType(u.openConnection().getContentType());

        response.setHeader("Content-Disposition""inline;filename="+fileName);

       

      }else{

        response.setContentType("application/x-msdownload");

        response.setHeader("Content-Disposition""attachment;filename="+fileName);

      }

      OutputStream out = response.getOutputStream();

      while((len=bufIn.read(buff))!=-1){

        out.write(buff,0,len);

        out.flush();

      }

      bufIn.close();

      out.close();

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值