• 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     }
     
    要看日出必须守到拂晓。
  • 相关阅读:
    在opencv3中实现机器学习之:利用正态贝叶斯分类
    在opencv3中进行图片人脸检测
    在opencv3中利用SVM进行图像目标检测和分类
    在opencv3中实现机器学习之:利用svm(支持向量机)分类
    在matlab和opencv中分别实现稀疏表示
    opencv2学习:计算协方差矩阵
    用python简单处理图片(3):添加水印
    Google protocol buffer在windows下的编译
    GEOS库学习之五:与GDAL/OGR结合使用
    GEOS库学习之四:几何关系判断
  • 原文地址:https://www.cnblogs.com/sunlang369/p/13498632.html
Copyright © 2020-2023  润新知