Welcome

首页 / 网页编程 / JSP / 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.-----------------------------7d9dd29630a34l = 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程序设计有所帮助。