zoukankan      html  css  js  c++  java
  • FileUpload

    一upload原理:

          1.表单的method必须是post方法

          2.enctype属性必须是“mutipatr/form-data”类型

           enctype默认的属性是“application/x-www-form-urlencoded”

           enctype的作用是:告知服务器请求正文的MIME类型

          application/x-www-form-urlencoded:username=aaa&password=123

          ServletRequest.getParameter(String name),该方法是专门用来读取enctype是“application/x-www-form-urlencoded”时的方法

          3.在Servlet里面通过request.getInputStream()方法就可以获得文件输入流

            byte[] b= new byte[1024];

            int len=0;

            InputStream is = request.getInputStream();
            while((len=is.read(b)) != -1){
            System.out.println(new String(b,0 ,len));
            }

    代码示例

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 <form action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
    11     请输入FileName<input type="text" name="FileName"/>
    12                 <input type="file"name="file"/>
    13                 <input type="submit" value="提交"/>
    14                 ${pageContext.request.contextPath}
    15                 
    16                 
    17     
    18     
    19 </form>
    20 
    21 </body>
    22 </html>
    jspShow
     1 package jcbc.ds.test1;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 import org.apache.commons.fileupload.FileItem;
    13 import org.apache.commons.fileupload.FileUploadException;
    14 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    15 import org.apache.commons.fileupload.servlet.ServletFileUpload;
    16 
    17 /**
    18  * Servlet implementation class UploadServlet
    19  */
    20 public class UploadServlet extends HttpServlet {
    21     private static final long serialVersionUID = 1L;
    22        
    23     /**
    24      * @see HttpServlet#HttpServlet()
    25      */
    26     public UploadServlet() {
    27         super();
    28         
    29     }
    30 
    31     /**
    32      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    33      */
    34     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    35         
    36         //创建DiskFileItemFactory对象
    37         //DiskFileItemFactory dis = new DiskFileItemFactory();
    38         //创建ServletFileUpload对象
    39         /*ServletFileUpload servletupload = new ServletFileUpload(dis);*/
    40         byte[] b= new byte[1024];
    41         int len=0;
    42         InputStream is = request.getInputStream();
    43         while((len=is.read(b)) != -1){
    44             System.out.println(new String(b,0 ,len));
    45         }
    46         /*try {
    47             List<FileItem>    fileItem = servletupload.parseRequest(request);
    48             for(FileItem items : fileItem) {
    49                 System.out.println(items.getName());
    50                 //进行解析传过来的数据进行封装
    51             }
    52             is.close();
    53             
    54         } catch (FileUploadException e) {
    55             // TODO Auto-generated catch block
    56             e.printStackTrace();
    57         }*/
    58         
    59     }
    60 
    61 }
    ServerServlet

    二借助第三方组件实现文件上传:

      步骤:

      1.拷贝jar包commons-fileupload.jar  commons-io.jar

        具体参考http://commons.apache.org/proper/commons-fileupload/using.html  

      2.//创建DiskFileItemFactory对象

        DiskFileItemFactory disfileitemfactory = new DiskFileItemFactory();
        //创建ServletFileUpload对象
        ServletFileUpload servletupload = new ServletFileUpload(disfileitemfactory);

      3.获取封装信息

        List<FileItem> fileItem = servletupload.parseRequest(request);//这里会抛异常

      具体步骤代码如下:

     1 package jcbc.ds.test1;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.OutputStream;
     7 import java.util.List;
     8 
     9 import javax.servlet.ServletException;
    10 import javax.servlet.http.HttpServlet;
    11 import javax.servlet.http.HttpServletRequest;
    12 import javax.servlet.http.HttpServletResponse;
    13 
    14 import org.apache.commons.fileupload.FileItem;
    15 import org.apache.commons.fileupload.FileUploadException;
    16 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    17 import org.apache.commons.fileupload.servlet.ServletFileUpload;
    18 import org.apache.commons.io.FileUtils;
    19 
    20 /**
    21  * Servlet implementation class UploadServlet
    22  */
    23 public class UploadServlet extends HttpServlet {
    24     private static final long serialVersionUID = 1L;
    25        
    26     /**
    27      * @see HttpServlet#HttpServlet()
    28      */
    29     public UploadServlet() {
    30         super();
    31         
    32     }
    33 
    34     /**
    35      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    36      */
    37     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    38         response.setContentType("text/html; charset=gbk");
    39         //创建DiskFileItemFactory对象
    40         DiskFileItemFactory disfileitemfactory = new DiskFileItemFactory();
    41         //创建ServletFileUpload对象
    42         ServletFileUpload servletupload = new ServletFileUpload(disfileitemfactory);
    43         
    44         try {
    45             //封装
    46             List<FileItem>    fileItem = servletupload.parseRequest(request);
    47             for(FileItem files : fileItem ){
    48                 if(files.isFormField()){
    49                     System.out.println(files.getFieldName());
    50                 }
    51                 else{
    52                     InputStream is = files.getInputStream();
    53                     String name = files.getName();
    54                     //截取文件名
    55                     String fileName = name.substring(name.lastIndexOf("\")+1);
    56                     System.out.println(fileName);//打印结果为huxuebing.txt
    57                     
    58                     System.out.println(request.getServletContext().getRealPath("/fileName"));
    59                     //创建File类对象
    60                     File file = new File(request.getServletContext().getRealPath("/")+fileName);
    61                     //判断该文件是否存在如果不存在就创建,存在就不创建
    62                     if(file.exists()==false){
    63                         System.out.println("==================");
    64                         file.createNewFile();
    65                         System.out.println("==================");
    66                     }
    67                     try {
    68                         //向创建的文件写入
    69                         files.write(file);
    70                     } catch (Exception e) {
    71                         // TODO Auto-generated catch block
    72                         e.printStackTrace();
    73                     }
    74                     
    75                 }
    76                         
    77             }
    78             
    79         } catch (FileUploadException e) {
    80             // TODO Auto-generated catch block
    81             e.printStackTrace();
    82         }
    83         
    84     }
    85 
    86 }
    commontsUploadFiles
    FileName
    huxuebing.txt
    D:workSpaceweb2.metadata.pluginsorg.eclipse.wst.server.core	mp0wtpwebappsday18fileName
    ==================
    ==================
    result

      

      

  • 相关阅读:
    python测试开发django-43.xadmin添加小组件报错解决
    python测试开发django-42.xadmin自定义菜单项
    python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)
    python测试开发django-40.模型(model)中choices使用
    python测试开发django-39.xadmin详情页面布局form_layout
    python测试开发django-45.xadmin添加小组件报错解决
    django后台xadmin如下配置(小结)
    禅道环境一键安装搭建指南
    Centos6.9部署ORTS5.0.22
    Linux 进程管理之四大名捕
  • 原文地址:https://www.cnblogs.com/huxuebing/p/5861376.html
Copyright © 2011-2022 走看看