1. 程式人生 > >通過JSP實現:從網頁上上載一個文字檔案,能顯示上傳成功。之後點一個按鈕能在網頁上顯示出該文字檔案的大小(位元組數)。

通過JSP實現:從網頁上上載一個文字檔案,能顯示上傳成功。之後點一個按鈕能在網頁上顯示出該文字檔案的大小(位元組數)。

(1)在E:\apache-tomcat-8.0.52\webapps\ROOT目錄下建立dou.jsp和upload.jsp檔案:

這裡寫圖片描述

兩個檔案的內容如下:

dou.jsp

<%@ page contentType="text/html; charset=UTF-8" %>  
<%@ page import="java.io.*"%>  
<%@ page import="java.util.*"%>  
<%@ page import="javax.servlet.*"%>  
<%@ page import="javax.servlet.http.*"
%> <html><head><title>upFile</title></head> <body bgcolor="#ffffff"> <% //定義上載檔案的最大位元組 int MAX_SIZE = 102400 * 102400; // 建立根路徑的儲存變數 String rootPath; //宣告檔案讀入類 DataInputStream in = null; FileOutputStream fileOut = null; //取得客戶端的網路地址 String remoteAddr = request.getRemoteAddr(); //獲得伺服器的名字
String serverName = request.getServerName(); //取得網際網路程式的絕對地址 String realPath = request.getRealPath(serverName); realPath = realPath.substring(0,realPath.lastIndexOf("\\")); //建立檔案的儲存目錄 rootPath = realPath + "\\upload\\"; //取得客戶端上傳的資料型別 String contentType = request.getContentType(); try{ if
(contentType.indexOf("multipart/form-data") >= 0){ //讀入上傳的資料 in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength(); if(formDataLength > MAX_SIZE){ out.println("<P>上傳的檔案位元組數不可以超過" + MAX_SIZE + "</p>"); return; } //儲存上傳檔案的資料 byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; //上傳的資料儲存在byte陣列 while(totalBytesRead < formDataLength){ byteRead = in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead; } //根據byte陣列建立字串 String file = new String(dataBytes,"UTF-8"); //out.println(file); //取得上傳的資料的檔名 String saveFile = file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0,saveFile.indexOf("\n")); saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); int lastIndex = contentType.lastIndexOf("="); //取得資料的分隔字串 String boundary = contentType.substring(lastIndex + 1,contentType.length()); //建立儲存路徑的檔名 String fileName = rootPath + saveFile; //out.print(fileName); int pos; pos = file.indexOf("filename=\""); pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; int boundaryLocation = file.indexOf(boundary,pos) - 4; //out.println(boundaryLocation); //取得檔案資料的開始的位置 int startPos = ((file.substring(0,pos)).getBytes()).length; //out.println(startPos); //取得檔案資料的結束的位置 int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length; //out.println(endPos); //檢查上載檔案是否存在 File checkFile = new File(fileName); if(checkFile.exists()){ out.println("<p>" + saveFile + "檔案已經存在.</p>"); } //檢查上載檔案的目錄是否存在 File fileDir = new File(rootPath); if(!fileDir.exists()){ fileDir.mkdirs(); } //建立檔案的寫出類 fileOut = new FileOutputStream(fileName); //儲存檔案的資料 fileOut.write(dataBytes,startPos,(endPos - startPos)); fileOut.close(); out.println(saveFile + "檔案成功上傳.</p>"); out.println("<p>檔案大小為"+formDataLength/1024 + "KB.</p>"); }else{ String content = request.getContentType(); out.println("<p>上傳的資料型別不是multipart/form-data</p>"); } }catch(Exception ex){ throw new ServletException(ex.getMessage()); } %> </body> </html>

upload.jsp

<%@ page contentType="text/html;charset=UTF-8"%>  
<html>  
<title><%= application.getServerInfo() %></title>  
<body>  
上傳檔案程式應用示例  
<form action="dou.jsp" method="post" enctype="multipart/form-data">  
<%-- 型別enctype用multipart/form-data,這樣可以把檔案中的資料作為流式資料上傳,不管是什麼檔案型別,均可上傳。--%>  
請選擇要上傳的檔案<input type="file" name="upfile" size="50">  
<input type="submit" value="提交併顯示檔案大小">    
</form>  
</body>  
</html>

這裡寫圖片描述
這裡寫圖片描述

(3)選擇檔案,點選提交併顯示檔案大小。

這裡寫圖片描述
這裡寫圖片描述