欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP实现快速上传文件的方法

程序员文章站 2022-05-03 16:17:40
本文实例讲述了jsp实现快速上传文件的方法。分享给大家供大家参考。具体如下: 这里演示jsp不使用第三方库,实现快速上传文件的功能 1. fileupload.java...

本文实例讲述了jsp实现快速上传文件的方法。分享给大家供大家参考。具体如下:

这里演示jsp不使用第三方库,实现快速上传文件的功能

1. fileupload.java:

package fileupload;
import java.io.bufferedoutputstream;
import java.io.file;
import java.io.fileoutputstream;
import javax.servlet.servletinputstream;
/**
 * 
 */
/**
 * @author qch
 * 
 */
public class fileupload
{
  servletinputstream in=null;
  string fpath="c://";
  public fileupload()
  {
    fpath="c://";
    in=null;
  }
  public void setinputstream(servletinputstream in)
  {
    this.in=in;
  }
  public void setfpath(string p)
  {
    this.fpath=p;
  }
  public string getfpath()
  {
    return fpath;
  }
  public string getparameter()
  { 
    string r=null;
    try
    {
      r=getparameter(in);
    }
    catch (exception e)
    {
      e.printstacktrace();
    }
    return r;
  }
  public long getfileupload()
  {
    long r=-1;
    try
    {
      r=getfileupload(in,fpath);
    }
    catch (exception e)
    {
      e.printstacktrace();
    }
    return r;
  }
  public string getparameter(servletinputstream in)// 只能按顺序提取
      throws exception
  {
    int l = 0;
    byte[] b = new byte[1024];
    l = in.readline(b, 0, b.length);// 依次是读取属性的开始符、名称、属性值的类型、属性的值
    string si = new string(b);
    if (si.startswith("----------------------------"))
    {// 表示是从开始符开始读,否则应为刚读取文件后的一个属性,此时应少读一次
      l = in.readline(b, 0, b.length);
    }
    l = in.readline(b, 0, b.length);
    l = in.readline(b, 0, b.length);
    string value = new string(b, 0, l);
    return value;
  }
  public long getfileupload(servletinputstream in, string fpath)// 需要提供输入流和存储路径
      throws exception
  {
    // out.println("文件信息:<br>");
    long begin = system.currenttimemillis();// 传送时间计时开始
    int l = 0;
    byte[] b = new byte[1024];
    l = in.readline(b, 0, b.length);
    string sign = new string(b, 0, l);// eg.-----------------------------7d9dd29630a34
    l = in.readline(b, 0, b.length);
    string info = new string(b, 0, l);// eg.content-disposition:form-data;
    // name="file";
    l = in.readline(b, 0, b.length);
    // string type=new
    // string(b,0,l);//eg.content-type:application/octet-stream(程序文件)
    l = in.readline(b, 0, b.length);
    // string nulll=new string(b,0,l);//此值应为空
    int nindex = info.tolowercase().indexof("filename=\"");
    int nlastindex = info.tolowercase().indexof("\"", nindex + 10);
    string filepath = info.substring(nindex + 10, nlastindex);
    int na = filepath.lastindexof("\\");
    string filename = filepath.substring(na + 1);
    // out.println("文件绝对路径:"+filepath+"<br>");
    // out.println("文件名:"+filename+"<br><br>");
    string path=fpath + filename;
    file fi = new file(path);// 建立目标文件
    if (!fi.exists()&&!fi.createnewfile())
      return -2;
    bufferedoutputstream f = new bufferedoutputstream(new fileoutputstream(
        fi));
    while ((l = in.readline(b, 0, b.length)) > 0)
    {
      if (l == sign.length())
      {
        string sign1 = new string(b, 0, sign.length());
        // out.println(sign1+"<br>");
        if (sign1.startswith(sign))// 比对是否文件已传完
          break;
      }
      f.write(b, 0, l);
      f.flush();
    }
    f.flush();
    f.close();
    long end = system.currenttimemillis();// 传送时间计时结束
    // out.println("上传文件用时:"+(end-begin)+"毫秒<br>");
    return end - begin;
  }
}

2. submitfile.jsp:

<%@ page language="java" import="java.util.*" pageencoding="gb18030"%>
<%
  string path = request.getcontextpath();
  string basepath = request.getscheme() + "://"
      + request.getservername() + ":" + request.getserverport()
      + path + "/";
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
  <head>
    <base href="<%=basepath%>">
    <title>my jsp 'submitfile.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->
    <script language="javascript">
      function check()
      {
        if (document.form2.name.value==""){
          alert("姓名不能为空!!");
          document.form2.name.focus();
          return false;
        }
        if (document.form2.file.value==""){
          alert("文件不能为空!!");
          return false;
        }
        return true;
      }
    </script>
  </head>
  <body>
    <br>
    <form method="post" name="form2" enctype="multipart/form-data"
      action="answerfile.jsp">
      <br>
      <p align="center">
         
        <br>
      </p>
      <table width="530" border="1" bgcolor="#c0c0c0" align="center"
        height="91">
        <tbody>
          <tr>
            <td valign="top" align="right">
              姓名
              <br>
            </td>
            <td valign="top">
              <input type="text" name="name">
            </td>
          </tr>
          <tr>
            <td align="right">
                文件
            </td>
            <td align="left">
               
              <input type="file" name="file">
            </td>
          </tr>
          <tr>
            <td valign="top" align="right">
              文件类型
              <br>
            </td>
            <td valign="top" align="left">
              <select size="1" name="leixing">
                <option selected value="作业">
                  作业
                </option>
                <option value="课程设计">
                  课程设计
                </option>
                <option value="论文">
                  论文
                </option>
              </select>
            </td>
          </tr>
          <tr>
            <td align="right">
              <input type="submit" value="上传" name="button2" onclick="return(check());">
            </td>
            <td align="left">
               
              <input type="reset" value="重置" name="button3">
            </td>
          </tr>
        </tbody>
      </table>
      <p>
         
        <br>
        <br>
         
      </p>
    </form>
  </body>
</html>

3. answerfile.jsp:



<%@ page language="java" import="java.util.*,java.io.*"
  pageencoding="gb18030"%>
<%
  string path = request.getcontextpath();
  string basepath = request.getscheme() + "://"
      + request.getservername() + ":" + request.getserverport()
      + path + "/";
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
  <head>
    <base href="<%=basepath%>">
    <title>my jsp 'answerfile.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->
  </head>
  <body>
    <jsp:usebean id="upload" scope="session" class="fileupload.fileupload"/>
    <jsp:setproperty name="upload" value="c://" property="fpath"/>
    <%
      servletinputstream in = request.getinputstream();
      upload.setinputstream(in);
      string nam = upload.getparameter();
      out.println("姓名:" + nam + "<br><br>");
      long time = upload.getfileupload();
      out.println("文件上传完毕,总共耗时:" + time + "毫秒<br>");
      string leixing = upload.getparameter();
      out.println("文件类型:" + leixing + "<br>");
      in.close();
    %>
    <br>
    <div align="right">
      <a href="index.jsp">回到首页</a>
    </div>
  </body>
</html>

希望本文所述对大家的jsp程序设计有所帮助。