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

编辑作者:www.789mux.com    在线用户:51    标签: 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("文件信息:
");
    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+"
");
    // out.println("文件名:"+filename+"

");
    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+"
");
        if (sign1.startsWith(sign))// 比对是否文件已传完
          break;
      }
      f.write(b, 0, l);
      f.flush();
    }
    f.flush();
    f.close();
    long end = System.currentTimeMillis();// 传送时间计时结束
    // out.println("上传文件用时:"+(end-begin)+"毫秒
");
    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 + "/";
%>

My JSP 'submitFile.jsp' starting page

 

 

 

姓名
  文件  
文件类型
 

 

 

 

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 + "/";
%>

My JSP 'AnswerFile.jsp' starting page <% ServletInputStream in = request.getInputStream(); upload.setInputStream(in); String nam = upload.getParameter(); out.println("姓名:" + nam + "

"); long time = upload.getFileUpload(); out.println("文件上传完毕,总共耗时:" + time + "毫秒
"); String leixing = upload.getParameter(); out.println("文件类型:" + leixing + "
"); in.close(); %>

 

 

以上就是实现JSP快速上传文件的方法,我们用实例分析了JSP不使用第三方库实现快速上传文件的完整流程与相关技巧。

请发表您的评论