SpringMvc 文件上传下载

来源:互联网 发布:sw画图软件 编辑:程序博客网 时间:2024/05/17 04:33

-------------------------------------SpringMvc 文件上传下载---------------------------------

1,使用maven,在pom.xml中添加

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.2</version></dependency>

2,在springmvc的配置文件中添加:

<!-- 配置上传解析器 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 配置上传文件最大尺寸为1000MB --><property name="maxUploadSize" value="1048576000" /><!-- 设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240 --><property name="maxInMemorySize" value="4096" /><!-- 表示用来解析request请求的默认编码格式,当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。 --><!-- 当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding --><property name="defaultEncoding" value="UTF-8" /></bean>

3,文件上传

    1)、单一文件:

          

@Controllerpublic class MultipartFileUploadController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)  public String uploadPost( @RequestParam("file") MultipartFile upload, HttpServletRequest request) throws Exception {    System.out.println("在以post请求方式处理上传的请求");    if (upload != null) {      // 记录开始上传文件的时间      long startTime = System.currentTimeMillis();      System.out.println("上传文件的名称:" + upload.getOriginalFilename());      System.out.println("上传文件的类型:" + upload.getContentType());      System.out.println("上传文件的大小:" + upload.getSize());      System.out.println("前台jsp提交上传控件的name属性:" + upload.getName());      System.out.println("获取上传文件的后缀名:" + FilenameUtils.getExtension(upload.getOriginalFilename()));      String webapp = request.getServletContext().getRealPath("/uploadFile");      System.out.println("上传文件保存到服务器webapp的路径:" + webapp);      // 存放文件的路径      File deskFile = new File(webapp, i++ + upload.getOriginalFilename());      System.out.println("上传文件存放的最终路径:" + deskFile.getAbsolutePath());      // 上传文件存放最终路径的父目录不存在,就创建一次      File parentFile = deskFile.getParentFile();      if (!parentFile.exists()) {parentFile.mkdirs();      }      // 方法1:使用commons-io工具包IOUtils类      // 获取上传文件的流      InputStream inputStream = upload.getInputStream();      FileOutputStream output = new FileOutputStream(deskFile);      // 把上传文件的inputStream拷贝到文件里面      IOUtils.copy(inputStream, output);      inputStream.close();      output.close();      // 方法2:使用MultipartFile.Transto 来保存上传的文件      upload.transferTo(deskFile);      // 通过测试方法2会快点      // 添加提示信息      request.setAttribute("msg", "上传成功");      // 记录结束上传文件的时间      long endTime = System.currentTimeMillis();      System.out.println("上传究竟用了多少时间:" + String.valueOf(endTime - startTime) + "ms");    }    // 直接转发到upload.jsp    return "upload";  }

    2)、多文件:

            方法1:   

@Controller  @RequestMapping("/file")  public class UploadController {                   @RequestMapping("/upload"   )      public String addUser(@RequestParam("file") CommonsMultipartFile[] files,HttpServletRequest request){                    for(int i = 0;i<files.length;i++){              System.out.println("fileName---------->" + files[i].getOriginalFilename());                        if(!files[i].isEmpty()){                  int pre = (int) System.currentTimeMillis();                  try {                      //拿到输出流,同时重命名上传的文件                      FileOutputStream os = new FileOutputStream("H:/" + new Date().getTime() + files[i].getOriginalFilename());                      //拿到上传文件的输入流                      FileInputStream in = (FileInputStream) files[i].getInputStream();                                            //以写字节的方式写文件                      int b = 0;                      while((b=in.read()) != -1){                          os.write(b);                      }                      os.flush();                      os.close();                      in.close();                      int finaltime = (int) System.currentTimeMillis();                      System.out.println(finaltime - pre);                                        } catch (Exception e) {                      e.printStackTrace();                      System.out.println("上传出错");                  }          }          }          return "/success";      }  
            方法2:
@RequestMapping("/upload2"  )      public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {          //创建一个通用的多部分解析器          CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());          //判断 request 是否有文件上传,即多部分请求          if(multipartResolver.isMultipart(request)){              //转换成多部分request                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;              //取得request中的所有文件名              Iterator<String> iter = multiRequest.getFileNames();              while(iter.hasNext()){                  //记录上传过程起始时的时间,用来计算上传时间                  int pre = (int) System.currentTimeMillis();                  //取得上传文件                  MultipartFile file = multiRequest.getFile(iter.next());                  if(file != null){                      //取得当前上传文件的文件名称                      String myFileName = file.getOriginalFilename();                      //如果名称不为“”,说明该文件存在,否则说明该文件不存在                      if(myFileName.trim() !=""){                          System.out.println(myFileName);                          //重命名上传后的文件名                          String fileName = "demoUpload" + file.getOriginalFilename();                          //定义上传路径                          String path = "H:/" + fileName;                          File localFile = new File(path);                          file.transferTo(localFile);                      }                  }                  //记录上传该文件后的时间                  int finaltime = (int) System.currentTimeMillis();                  System.out.println(finaltime - pre);              }                        }          return "/success";      }  

原创粉丝点击