SpringMVC 学习笔记(文件的上传和下载)

  在web项目中会遇到的问题:文件上传

  文件上传在前端页面的设置:form表单 设置 input 类型

    文件上传的请求方式要使用post,要将enctype设置为multipart/form-data   ;  Input的类型设为file

<form action="UploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>

1、  使用CommonsMultipartResolver方式上传文件

    所需的第三方依赖

      commons-fileupload:commons-fileupload:1.3.1

      commons-io:commons-io:2.4

    在SpringMVC.xml 文件中配置文件处理 对象

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="10485760000" />
        <property name="maxInMemorySize" value="40960" />
</bean>

    然后在Controller的处理方法中:通过MultipartFile或者CommonsMultipartFile类型参数来接收客户端发送的文件数据,通过其transferTo方法写文件

@RequestMapping("/upload.action")
    public String upload(Model model,MultipartFile file){
    //查看得到文件的相关属性 // if(file!=null){ // System.out.println(file.getContentType()); // System.out.println(file.getOriginalFilename()); // System.out.println(file.getSize()); // model.addAttribute("file", file.getOriginalFilename()); // } try { file.transferTo(new File("D:/"+UUID.randomUUID()+".jpg"));//用file.transferTo("fileURL")方法来对上传文件进行存储 } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "index"; }

 

2、使用StandardServletMultipartResolver方式文件上传,使用的servlet3.0文件上传的技术,不需要使用第三方包

  文件处理器的配置(SpringMVC中)

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/> 

  文件上传的相关设置 在 web.xml中设置

<multipart-config> 
    <max-file-size>5242880</max-file-size> <!--单个文件最大大小:5MB-->
    <max-request-size>20971520</max-request-size> <!--所有文件最大大小:20MB-->
   <file-size-threshold>0</file-size-threshold> <!-- 超过这个大小直接存硬盘,而不是内存 -->
 </multipart-config>

  请求的处理方法

    通过request获取Part,通过Part的write方法写文件(保存文件)

@RequestMapping("/upload2.action")
    public String upload2(HttpServletRequest request){
        try {
            //从request中获取part
            List<Part> parts = (List<Part>) request.getParts();
            //每一个part可以对每一个上传的文件进行处理
            Part part = parts.get(0);
            //通过part存储文件
            part.write("D:/"+UUID.randomUUID());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "index";
    }

 

3、多文件上传

  

@RequestMapping("/upload.action")
    public String upload(Model model,MultipartFile[] files){

      for (MultipartFile multipartFile : multipartFiles) {  

                System.out.println(multipartFile.getName() + "-----" + multipartFile.getOriginalFilename());  

                ModelMap uploadOne = uploadOne(multipartFile); //调用单个文件的处理方法 

         }  

}    

 

posted @ 2017-09-07 14:55  火之非常高兴  阅读(255)  评论(0编辑  收藏  举报