服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

文件上传的完全攻略


  1. 你在html页面中写下面的语句就可以把文件数据传到servlet中。
  <%@page contenttype="text/html;charset=gb2312"%>
  
  
  
  
  
  
  
  
  
  2. 在sevelt的代码这样写的,它调用fileload这个类来做文件上传。
    package fileload.com.lh;
  
  /**
  * 此处插入类型描述。
  * 创建日期:(2002-11-12 16:10:26)
  * @author:无是无非
  */
  import javax.servlet.http.*;
  import javax.servlet.*;
  import java.util.*;
  import java.io.*;
  import javax.servlet.servletinputstream;
  public class flservlet extends javax.servlet.http.httpservlet {
  
  /**
  * flservlet 构造子注解。
  */
  public flservlet() {
  super();
  }
  
  protected void doget(
    javax.servlet.http.httpservletrequest request,
    javax.servlet.http.httpservletresponse response)
    throws javax.servlet.servletexception, java.io.ioexception {
    dopost(request, response);
  
  }
  
  protected void dopost(httpservletrequest request, httpservletresponse response)
    throws javax.servlet.servletexception, java.io.ioexception {
  
    //上传文件
  
    fileload fl = new fileload();
    fl.prepareforfile(request);
  
  }
  }
  
  3. fileload类的代码如下。
  package fileload.com.lh;
  
  /**
  * 此处插入类型描述。
  * 创建日期:(2002-11-12 16:14:10)
  * @author:无是无非
  */
  
  import javax.servlet.http.*;
  import javax.servlet.*;
  import java.util.*;
  import java.io.*;
  import javax.servlet.servletinputstream;
  public class fileload {
  
    public servletinputstream sis = null;
    public byte[] b = new byte[4096]; //字节流存放数组
    public string sourcefile = ""; //源文件名
    private int count = 0; //已传输文件数目
    public double size = double.max_value; //限制大小
    public string suffix = ""; //文件后缀名
    public string objectfilename = ""; //目标文件名
    public string objectpath = "e://"; //目标文件目录
    public boolean successful = true;
  
  /**
  * fileload 构造子注解。
  */
  public fileload() {
  super();
  }
  /**
  * 此处插入方法描述。
  * 创建日期:(2002-11-14 9:32:16)
  * @param response javax.servlet.http.httpservletresponse
  */
  public void prepareforfile(httpservletrequest request) {
    try {
      sis = request.getinputstream();
      int a = 0;
      int k = 0;
      string s = "";
      while ((a = sis.readline(b, 0, b.length)) != -1)
  //判断是否从文件中读到内容
        {
        s = new string(b, 0, a);
        if ((k = s.indexof("filename=")) != -1)
  //传过来的每个文件中都有"filename="这段文字
          {
          s = s.substring(k + 10);
          k = s.indexof("/"");
          s = s.substring(0, k); //得到了文件全部名称
          sourcefile = s;
          k = s.lastindexof(".");
          suffix = s.substring(k + 1); //得到了文件的扩展名
          transferfile();
        }
  
      }
    } catch (exception ex) {
      ex.printstacktrace();
    }
  }
  /**
  * 此处插入方法描述。
  * 创建日期:(2002-11-14 9:16:19)
  * @param i int
  */
  public void transferfile() {
    string x = long.tostring(new java.util.date().gettime());
    try {
      objectfilename = x + "." + suffix;
      fileoutputstream out = new fileoutputstream(objectpath + objectfilename);
  
      int a = 0;
      int k = 0;
      long hastransfered = 0; //标示已经传输的字节数
      string s = "";
      while ((a = sis.readline(b, 0, b.length)) != -1) {
        s = new string(b, 0, a);
        if ((k = s.indexof("content-type:")) != -1)
          break;
      }
      sis.readline(b, 0, b.length);
      while ((a = sis.readline(b, 0, b.length)) != -1) {
        s = new string(b, 0, a);
        if ((b[0] == 45)
          && (b[1] == 45)
          && (b[2] == 45)
          && (b[3] == 45)
          && (b[4] == 45))
          break;
        out.write(b, 0, a);
        hastransfered += a;
        if (hastransfered >= 1000) {
  
          system.out.println("文件超大了!!");
          successful = false;
          break;
        }
        ++count;
  
      }
      if (!successful) {
        //如果传送文件没有成功就删除掉这个文件
        out.close();
        sis.close();
        string tem = objectpath + objectfilename;
        file del = new file(tem);
        del.delete();
      }
      out.close();
    } catch (ioexception ioe) {
      system.out.println("ioexception!!");
    }
  }
  }

扫描关注微信公众号