程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 用JavaBean實現文件上載(二)

用JavaBean實現文件上載(二)

編輯:J2EE
上載文件   眾所周知,JavaBean是Java平台的軟件組件,下面要實現的上載功能就是用JavaBean實現,所以它可以方便地應用到任何需要文件上載功能的應用之中。 代碼清單如下: package com.brainysoftware.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletInputStream; import java.util.Dictionary; import java.util.Hashtable; import java.io.PrintWriter; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class FileUploadBean { private String savePath, filepath, filename, contentType; private Dictionary fields; public String getFilename() { return filename; } public String getFilepath() { return filepath; } public void setSavePath(String savePath) { this.savePath = savePath; } public String getContentType() { return contentType; } public String getFieldValue(String fieldName) { if (fields == null || fieldName == null) return null; return (String) fields.get(fIEldName); } private void setFilename(String s) { if (s==null) return; int pos = s.indexOf("filename=\""); if (pos != -1) { filepath = s.substring(pos+10, s.length()-1); // Windows浏覽器發送完整的文件路徑和名字 // 但Linux/Unix和Mac浏覽器只發送文件名字 pos = filepath.lastIndexOf("\\"); if (pos != -1) filename = filepath.substring(pos + 1); else filename = filepath; } } private void setContentType(String s) { if (s==null) return; int pos = s.indexOf(": "); if (pos != -1) contentType = s.substring(pos+2, s.length()); } public void doUpload(HttpServletRequest request) throws IOException { ServletInputStream in = request.getInputStream(); byte[] line = new byte[128]; int i = in.readLine(line, 0, 128); if (i < 3) return; int boundaryLength = i - 2; String boundary = new String(line, 0, boundaryLength); //-2丟棄換行字符 fields = new Hashtable(); while (i != -1) { String newLine = new String(line, 0, i); if (newLine.startsWith("Content-Disposition: form-data; name=\"")) { if (newLine.indexOf("filename=\"") != -1) { setFilename(new String(line, 0, i-2)); if (filename==null) return; //文件內容 i = in.readLine(line, 0, 128); setContentType(new String(line, 0, i-2)); i = in.readLine(line, 0, 128); //空行 i = in.readLine(line, 0, 128); newLine = new String(line, 0, i); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter((savePath==null? "" : savePath) + filename))); while (i != -1 && !newLine.startsWith(boundary)) { // 文件內容的最後一行包含換行字符 // 因此我們必須檢查當前行是否是最 // 後一行 i = in.readLine(line, 0, 128); if ((i==boundaryLength+2 || i==boundaryLength+4) && (new String(line, 0, i).startsWith(boundary))) pw.print(newLine.substring(0, newLine.length()-2)); else pw.print(newLine); newLine = new String(line, 0, i); } pw.close(); } else { // 普通表單輸入元素 // 獲取輸入元素名字 int pos = newLine.indexOf("name=\""); String fieldName = newLine.substring(pos+6, newLine.length()-3); i = in.readLine(line, 0, 128); i = in.readLine(line, 0, 128); newLine = new String(line, 0, i); StringBuffer fieldValue = new StringBuffer(128); while (i != -1 && !newLine.startsWith(boundary)) { // 最後一行包含換行字符 // 因此我們必須檢查當前行是否是最後一行 i = in.readLine(line, 0, 128); if ((i==boundaryLength+2 || i==boundaryLength+4) && (new String(line, 0, i).startsWith(boundary))) fieldValue.append(newLine.substring(0, newLine.length()-2)); else fieldValue.append(newLine); newLine = new String(line, 0, i); } fields.put(fieldName, fIEldValue.toString()); } } i = in.readLine(line, 0, 128); } } }   代碼的第一行是包聲明,如果你不想讓該類從屬於任何包,可以刪除這行代碼。接下來的幾行代碼聲明了該JavaBean所要引用的各個類和接口。   FileUploadBean類有5個私有的屬性(域),6個公用的方法,2個私有的方法。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved