评论

收藏

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

开发技术 开发技术 发布于:2021-10-23 14:58 | 阅读数:517 | 评论:0

本文实例讲述了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:
&#65279;<%@ 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" >
      </td>
      <td align="left">
         
        <input type="reset" value="重置" name="button3">
      </td>
      </tr>
    </tbody>
    </table>
    <p>
     
    <br>
    <br>
     
    </p>
  </form>
  </body>
</html>
3. AnswerFile.jsp:
&#65279;
<%@ 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程序设计有所帮助。

关注下面的标签,发现更多相似文章