zoukankan      html  css  js  c++  java
  • springmvc中文件上传

    对表单中的 enctype 属性做个详细的说明:
     
      application/x-www=form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。
     
      multipart/form-data:只能配合psot请求 这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。
     
      text/plain:除了把空格转换为 "+" 号外,其他字符都不做编码处理,这种方式适用直接通过表单发送邮件。
    1 <form action="${pageContext.request.contextPath}/admin/addUser" method="post" enctype="multipart/form-data">
    2         用户名称:<input type="text" name="username"><br><br><br>
    3         用户性别:<input type="text" name="sex"><br><br><br>
    4         用户住址:<input type="text" name="address"><br><br><br>
    5         <input type="submit" value="添加">
    6     </form>
      Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。
     
      而Spring MVC则提供了更简单的封装。
     
      Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。
     
      Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:
     
      CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache CommonsFileUpload的组件。、
     
    1.导入上传文件支持的依赖
     1 <dependency>
     2             <groupId>commons-fileupload</groupId>
     3             <artifactId>commons-fileupload</artifactId>
     4             <version>1.3.3</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>javax.servlet</groupId>
     8             <artifactId>javax.servlet-api</artifactId>
     9             <version>4.0.1</version>
    10         </dependency>

    2.配置springmvc.xml,注册bean进入spring

    1   <!--文件上传配置-->
    2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    3         <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容, 默认为ISO-8859-1 -->
    4         <property name="defaultEncoding" value="utf-8"/>
    5         <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
    6         <property name="maxUploadSize" value="10485760"/>
    7         <property name="maxInMemorySize" value="40960"/>
    8     </bean>
    拓展:CommonsMultipartFile 的 常用方法:
      String getOriginalFilename():获取上传文件的原名
      InputStream getInputStream():获取文件流
      void transferTo(File dest):将上传文件保存到一个目录文件中
    3.编写前端支持
    1 <form action="/upload" enctype="multipart/form-data" method="post">
    2 <input type="file" name="file"/>
    3 <input type="submit" value="upload">
    4 </form>  
    4.编写controller 
      使用原始servlet方式进行文件上传(从输入到输出,即从文件中输入到缓冲区中再输出到内存中保存)
     1    //使用servlet原始方式文件上传
     2     //@RequestParam("file") 将name=file控件得到的文件封装成 CommonsMultipartFile 对象
     3     //批量上传CommonsMultipartFile则为数组即可
     4     @RequestMapping("/upload")
     5     public String upload(@RequestParam("file")CommonsMultipartFile file, HttpServletRequest request) throws IOException {
     6             //获取文件名 : file.getOriginalFilename();
     7          String uploadFileName = file.getOriginalFilename();
     8         System.out.println("上传文件名 : "+uploadFileName);
     9         //上传路径保存设置
    10          String path = request.getSession().getServletContext().getRealPath("/upload");
    11          //如果路径不存在,则创建一个
    12         File realPath = new File(path);
    13         if (!realPath.exists()){
    14             realPath.mkdir();
    15         }
    16         System.out.println("上传文件保存地址:"+realPath);
    17         //文件输入流
    18         InputStream is = file.getInputStream();
    19         //文件输出流
    20          OutputStream os = new FileOutputStream(new File(realPath,uploadFileName));
    21         //读取写出
    22         int len = 0;
    23         byte[] buffer = new byte[1024];
    24         while ((len = is.read(buffer)) != -1) {
    25             os.write(buffer, 0, len);
    26             os.flush();
    27         }
    28         os.close();
    29         is.close();
    30         return "redirect:/show.jsp";
    31     }

      采用springmvc自带的文件上传

     1  //采用springmvc中自带的file.transto方式上传
     2     @RequestMapping("/upload2")
     3     public String upload2(@RequestParam("file2") CommonsMultipartFile file,HttpServletRequest request) throws IOException {
     4        //上传路径保存设置
     5         String path = request.getSession().getServletContext().getRealPath("/upload");
     6         File realPath = new File(path);
     7         //如果没有就创建
     8         if (!realPath.exists()){
     9             realPath.mkdir();
    10         }
    11         //上传文件地址
    12          System.out.println("上传文件保存地址:"+realPath);
    13         //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
    14          file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));
    15         return "redirect:/show.jsp";
    16     }
    文件下载(从输出到输入,即从内存中输出到缓冲流中在输入到指定文件中)
     1  //文件下载(从输出到输入,即从内存中输出到缓冲流中在输入到指定文件中)
     2     @RequestMapping("/downloads")
     3     public String downloads(HttpServletRequest request, HttpServletResponse response) throws IOException {
     4         //要下载的图片地址
     5          String path = request.getSession().getServletContext().getRealPath("/upload");
     6          String fileName = "基础语法.jpg";
     7         //1、设置response 响应头
     8          response.reset();//设置页面不缓存,清空buffer
     9          response.setCharacterEncoding("UTF-8");//字符编码
    10          response.setContentType("multipart/form-data"); //二进制传输数据
    11         //设置响应头
    12         response.setHeader("Content-Disposition", "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
    13         //把将要下载的资源放假文件中
    14         File file = new File(path,fileName);
    15         //2、 读取文件--输入流
    16          InputStream input=new FileInputStream(file);
    17         // 3、 写出文件--输出流
    18         OutputStream out = response.getOutputStream();
    19         byte[] buff = new byte[1024];
    20         int index = 0;
    21         // 4、执行 写出操作
    22         while ((index = input.read(buff)) != -1) {
    23             out.write(buff, 0, index);
    24             out.flush();
    25         }
    26         out.close();
    27         input.close();
    28         return null;
    29     }
     
    要看日出必须守到拂晓。
  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/sunlang369/p/13498632.html
Copyright © 2011-2022 走看看