45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:JSP如何快速上传文件?

JSP如何快速上传文件?

2015-10-25 20:52:04 来源:www.45fan.com 【

JSP如何快速上传文件?

本文实例讲述了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程序设计有所帮助。


本文地址:http://www.45fan.com/bcdm/25539.html
Tags: 实现 JSP 快速
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部