Servlet 3.0已經大幅簡化網頁檔案上傳的程式寫法,以下是撰寫的幾個重點。
HTML寫法
- <form>的enctype要是"multipart/form-data"
- 使用POST方法
- <input type="file" >是主要使用的檔案瀏覽元素
- 後端接收的Servlet寫在action屬性裡
<form name="Form1" id="Form1" method="POST" action="/xxx/servlet/com.xxx.test.UploadTest"
enctype="multipart/form-data">
<input type="file" name="FILE" id="FILE" value=""/>
<input type="hidden" name="DIR" id="DIR"/>
<input name="btnUpload" id="btnUpload" type="submit" value="上傳檔案" />
</form>
Servlet寫法
- 以@MultipartConfig(location = “c:/www/xxx/data/")指定寫檔路徑
- 以request.getPart( )取出Part檔案物件
- 中文檔名不同的Container系統或版本作法不同,要實際測試一下
/* $Id: UploadTest.java 104565 2012-06-15 06:29:48Z jerry $
*/
package com.xxx.test;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
/**
* Upload file from HTML form post.
*
* @version: jerry 2012/06/19
*/
@MultipartConfig(location = "c:/www/xxx/data/")
public class UploadTest extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); // 為了處理中文檔名
PrintWriter out = resp.getWriter();
try {
Part _oPart = req.getPart("FILE");
String _sFilename = getFilename(_oPart); // 檔名由Header取出
// _sFilename = new String(_sFilename.getBytes("ISO8859_1"),"UTF-8"); // 在不同的code page啟動AP時有時需要轉碼
System.out.println("Uploaded filename=" + _sFilename); // debug
File _oFile = new File("c:/www/xxx/data/" + _sFilename);
if (_oFile.exists()) _oFile.delete(); // 檔案已存在時先刪除
_oPart.write(_sFilename); // saving the uploaded file.
out.println("上傳成功");
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
out.println("ERR:" + e.getMessage());
} finally {
}
}
private static String getFilename(Part part) {
for (String cd : part.getHeader("content-disposition").split(";")) {
if (cd.trim().startsWith("filename")) {
String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix.
}
}
return null;
}
}
參考
##
您可能也會有興趣的類似文章
- 如何將Markdown文件轉換成HTML? (1則留言, 2011/03/06)
- [HTML&CSS] 鎖定左側功能選單,不隨頁面捲動 (0則留言, 2007/04/05)
- 網頁顯示程式碼的美容師:CodePress (0則留言, 2007/03/27)
- Resin 3.0.18與其PHP引擎 (0則留言, 2006/02/26)
- JTrac:Open source的Java Issue Tracking System (0則留言, 2008/01/25)
- [Java] IDEA 5.0觀看JSP檔案的不同View (0則留言, 2005/08/04)
- Java十年有成 (0則留言, 2005/04/12)
- [Java] jTDS: SQL Server的JDBC驅動程式 (0則留言, 2005/03/03)
- Java I18N國際化工具:JRC-Editor (0則留言, 2008/03/01)
- [ADS] 在Linux上執行Aqua Data Studio (0則留言, 2006/03/16)
- NetBeans 5.0和亨利.馬諦斯(Matisse) (0則留言, 2006/01/30)
- 解決 iReport 升級後的問題 (1則留言, 2005/11/22)
- iReport 0.4測試 (0則留言, 2005/02/12)
- iReport 0.5更新與Groovy (2則留言, 2005/05/24)
- 又一個Java寫的資料庫前端工具:Execute Query 3.0 (2則留言, 2006/09/21)
分享: