upload:
upload <html> <head> <meta http-equiv=Content-Type content="text/html; charset=big5"> <title>Oreilly 上傳檔案 </title> </head> <body> <!-- enctype 的值很重要 ,upload.jsp 為處理上傳的 jsp--> <!-- 網頁一定要用 BIG5 呈現 , 檔案上傳後 , 才會以 BIG5 檔案名稱保存 --> <form name="form1" method="post" enctype="multipart/form-data" action="upload_3files.jsp"> <p> <input name="file1" type="file"> </p> <p> <input name="file2" type="file"> </p> <p> <input name="file3" type="file"> </p> <p> <input type="submit" name="Submit" value=" 上傳 "> </p> </form > </body> </html> <%@page import="java.io.*"%> <%@page import="java.util.*"%> <%@page import="com.oreilly.servlet.MultipartRequest"%> <%@page import="com.oreilly.servlet.multipart.FileRenamePolicy"%> <%@page contentType="text/html;charset=big5" %> <% // 檔上傳後,保存在 c:\\upload String saveDirectory ="D:\\uploads"; // 每個檔最大 35m, 最多 3 個檔 , 所以 ... int maxPostSize =3 * 35 * 1024 * 1024 ; //response 的編碼為 "big5", 同時採用缺省的檔案名衝突解決策略 , 實現上傳 MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"big5"); // 輸出回饋資訊 Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { System.err.println("ccc"); String name = (String)files.nextElement(); File f = multi.getFile(name); if(f!=null){ String fileName = multi.getFilesystemName(name); String lastFileName= saveDirectory+"\\" + fileName; out.println(" 上傳的文件 :"+lastFileName); out.println("<hr>"); } } %> <meta http-equiv="Content-Type" content="text/html; charset=big5"> 你已經成功上傳檔案 ! up load.html upload_3files.jsp
download 方法一:
do wnload 方法一 <%@ page language="java" contentType="text/html; charset=big5" pageEncoding="big5" import="java.util.*, java.io.*, java.net.URLEncoder" %><% // 來源檔案與接收檔案名稱不同 , 這樣 Client 永遠都不會知道儲存在
Server 端的檔案名稱為何 ! String src_fname = "d:\\temp\\aa.txt"; // 中文 .doca String dst_fname = URLEncoder.encode(" 下載檔案 .txt","UTF-8"); request.setCharacterEncoding("big5"); response.setContentType("application/octet-stream; charset=iso-8859-1"); response.setHeader("Content-disposition", "attachment; filename=\"" + dst_fname + "\""); FileInputStream fis = null; int byteRead; try { fis = new FileInputStream(src_fname); while ((byteRead = fis.read()) != -1) { out.write(byteRead); } out.flush(); } catch (Exception e) { out.clearBuffer(); response.setContentType("text/html; charset=big5"); response.setHeader("Content-disposition", "inline"); out.println("<HTML><BODY><P>"); out.println(e.toString()); out.println("</P><p> 要防止系統找不到指定的檔案 , 丟出 Exception 時 , 將原始檔案絕對路徑秀出問題 </p>"); out.println("</BODY></HTML>"); } if (fis != null) { fis.close(); } return; // 避免下面多按了 Enter 鍵而輸出多餘的換行字元 . %> download.jsp
download 方法二:
<%@ page language="java" contentType="text/html; charset=big5" pageEncoding="big5" import="java.util.*, com.darkside.JspUtil " %><% try { JspUtil.download(request, response, "d:\\temp\\ 中文 .rar", " 下載 .rar"); } catch (Exception e) { // 若發生錯誤,就改由瀏覽器顯示錯誤訊息 out.write("Download ERROR"); } %> package com.darkside ; //package temp_test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.JspWriter; import java.net.URLEncoder; public final class JspUtil { /** * 提供 JSP/servlet 檔案下載的功能。 * @param req 由 JSP/servlet 傳入的 Request 物件。 * @param resp 由 JSP/servlet 傳入的 Response 物件。 * @param src_fname 來源檔名,包含完整路徑名。 * @param dst_fname 目的檔名,不用路徑名稱。 * @throws ServletException * @throws IOException */ public static void download(HttpServletRequest req,HttpServletResponse resp,String src_fname,String dst_fname) throws ServletException, IOException { req.setCharacterEncoding("big5"); resp.setContentType("application/octet-stream; charset=iso-8859-1"); resp.setHeader("Content-disposition", "attachment; filename=\"" + URLEncoder.encode(dst_fname,"UTF-8") + "\""); FileInputStream fis = null; ServletOutputStream out = resp.getOutputStream(); int byteRead; try { fis = new FileInputStream(src_fname); while ((byteRead = fis.read()) != -1) { out.write(byteRead); } out.flush(); } catch (Exception e) { System.out.println(e.toString()); System.out.println(" 要防止系統找不到指定的檔案 , 丟出 Exception 時 , 將原始檔案絕對路徑秀出問題 "); } if (fis != null) { fis.close(); } if (out != null) {//20040412 new out.close();//20040412 new }//20040412 new //System.out.println("here is :"+_content); //req.setAttribute("message", _content); return; // 避免下面多按了 Enter 鍵而輸出多餘的換行字元 . // .... 略 } } download.jsp JspUtil .java do wnload 方法二 並沒有用到 3rd party 軟體