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("http://"); 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
"); long time = upload.getFileUpload(); out.println("文件上傳完畢,總共耗時:" + time + "毫秒
"); String leixing = upload.getParameter(); out.println("文件類型:" + leixing + "
"); in.close(); %>
?
?
以上就是實現JSP快速上傳文件的方法,我們用實例分析了JSP不使用第三方庫實現快速上傳文件的完整流程與相關技巧。
新聞熱點
疑難解答