slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
客戶端的檔案上傳 PowerPoint Presentation
Download Presentation
客戶端的檔案上傳

Loading in 2 Seconds...

play fullscreen
1 / 12

客戶端的檔案上傳 - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

客戶端的檔案上傳. HTML 的檔案欄位標籤 使用 Java I/O 類別上傳檔案 使用 JSP 檔案上傳套件上傳檔案. HTML 的檔案欄位標籤. HTML 檔案欄位可以在瀏覽程式檢視或選擇客戶端的檔案清單,選擇的檔案是儲存在客戶端電腦,然後將選擇檔案以 HTTP POST 方法上傳到 Web 伺服器,其基本語法如下所示: <input type="FILE" name="field_name"> 檔案欄位的主要目的是上傳檔案,所以表單 <form> 標籤需要設定 enctype 屬性,如下所示:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '客戶端的檔案上傳' - luyu


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
客戶端的檔案上傳
  • HTML的檔案欄位標籤
  • 使用Java I/O類別上傳檔案
  • 使用JSP檔案上傳套件上傳檔案
slide2
HTML的檔案欄位標籤
  • HTML檔案欄位可以在瀏覽程式檢視或選擇客戶端的檔案清單,選擇的檔案是儲存在客戶端電腦,然後將選擇檔案以HTTP POST方法上傳到Web伺服器,其基本語法如下所示:

<input type="FILE" name="field_name">

  • 檔案欄位的主要目的是上傳檔案,所以表單<form>標籤需要設定enctype屬性,如下所示:

<form action="filename.jsp" method="post" enctype="multipart/form-data">

  • 表單的處理程式為JSP程式,使用post方法送出,encytype屬性為上傳檔案資料的編碼方式。
java i o
使用Java I/O類別上傳檔案-開啟串流
  • 在建立上傳檔案的HTML表單後,表單處理的JSP程式可以使用Java I/O類別將上傳檔案資料寫成伺服端的檔案。首先取得輸入串流,如下所示:

ServletInputStream in = request.getInputStream();

  • 程式碼使用request物件的getInputStream()方法取得ServletInputStream的輸入串流,這就是客戶端上傳檔案的送出的檔案串流。
  • 接著可以在伺服端開啟檔案輸出串流,如下:

PrintWriter pw = new PrintWriter(

new BufferedWriter(new FileWriter(name)));

java i o1
使用Java I/O類別上傳檔案-上傳檔案
  • 最後使用while迴圈建立伺服端檔案,如下所示:

while ((ch = in.read()) != -1)

pw.print((char) ch);

  • 上述while迴圈使用read()方法從ServletInputStream讀入資料後,馬上將它使用print()方法寫入PrintWriter串流的伺服端檔案。
slide5
範例
  • <form action="Ch12_3_3.jsp" method="POST"
  • enctype="multipart/form-data">
  • 選擇上傳檔案: <input type="FILE" name="file1"><br>
  • 選擇上傳檔案: <input type="FILE" name="file2"><br>
  • 選擇上傳檔案: <input type="FILE" name="file3"><br>
  • 上傳檔案說明: <input type="TEXT" name="description"><br><br>
  • <input type="submit" name="Upload" value="上傳檔案">
  • </form><hr>
slide6
範例
  • <!-- JSP程式:Ch12_3_2.jsp -->
  • <%@ page contentType="text/html; charset=MS950"
  • import="java.io.*"%>
  • <html>
  • <head><title>Ch12_3_2</title></head>
  • <body>
  • <%
  • // 輸出的檔案名稱
  • String name=application.getRealPath("/a.txt");
  • String file_name=request.getParameter("file1");
  • out.println(file_name);
  • // 取得輸入串流
  • ServletInputStream in = request.getInputStream();
  • // 建立BufferedWriter的輸出串流物件
  • PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(name)));
  • int ch;
  • // 將輸入串流的資料寫入檔案
  • while ((ch = in.read()) != -1)
  • pw.print((char)ch);
  • pw.close(); // 關閉串流
  • out.print("上傳檔案成功..."+name+"<br>");
  • %>
  • </body>
  • </html>
jsp o reilly
使用JSP檔案上傳套件上傳檔案-下載與安裝O’Reilly上傳套件使用JSP檔案上傳套件上傳檔案-下載與安裝O’Reilly上傳套件
  • O’Reilly上傳套件是由Jason Hunter開發的Java套件,可以免費下載使用在非商業用途的Web應用程式,免費下載網址如下所示:

http://www.servlets.com/cos/

  • 上述網址可下載最新版的上傳套件,下載檔案是ZIP格式壓縮檔,教學網頁上的版本是2002年11月版,檔案名稱為cos-05Nov2002.zip。
  • O’Reilly上傳套件的安裝十分簡單,只需將檔案解壓縮到Web應用程式的「WEB-INF」資料夾即可,這是一些安裝在classes資料夾下,屬於com.oreilly.servlet.*套件的Java類別檔。
  • 例如:將壓縮檔內的classes資料夾移入某專案檔內c:\workspace\file_up\WEB-INF\classes
  • (請使用refresh確保能正確的import)
jsp multipartrequest
使用JSP檔案上傳套件上傳檔案-建立MultipartRequest物件使用JSP檔案上傳套件上傳檔案-建立MultipartRequest物件

使用O’Reilly上傳套件同時上傳多個檔案

  • JSP程式可以使用page指引元素匯入套件的MultipartRequest類別,如下所示:

<%@ page

import="com.oreilly.servlet.MultipartRequest“

%>

  • 接下來可以建立MultipartRequest物件取得上傳檔案和檔案的相關資訊,如下所示:

MultipartRequest mreq = new

MultipartRequest(

request,path,maxSize,"MS950");

jsp multipartrequest1
使用JSP檔案上傳套件上傳檔案-MultipartRequest物件方法使用JSP檔案上傳套件上傳檔案-MultipartRequest物件方法
slide10
範例
  • <%@page import="com.oreilly.servlet.MultipartRequest"%>
  • <%@page contentType="text/html" pageEncoding="UTF-8"%>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • <html>
  • <head>
  • <title>File_Chinese.jsp</title>
  • </head>
  • <body>
  • test
  • <%
  • // 宣告將上傳之檔案放置到伺服器的目錄中
  • // 宣告限制上傳之檔案大小為 50 MB
  • String saveDirectory = "c:\\test"; //String saveDirectory =aplication.getRealPath(“/”);
  • int maxPostSize = 50 * 1024 * 1024 ;
  • // 宣告上傳檔案名稱
  • String strFileName = null;
  • // 宣告上傳檔案型態
  • String strContentType = null;
  • // 宣告敘述上傳檔案內容敘述
  • String strDescription = null;
  • // 為Big5或MS950則支援中文檔名
  • String enCoding = "MS950";
  • out.println("Yes");
  • // 產一個新的MultipartRequest 的物件,multi
  • MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, enCoding);
  • // 取得所有上傳之檔案輸入型態名稱及敘述
  • strFileName = multi.getFilesystemName("File1");
  • strContentType = multi.getContentType("File1");
  • strDescription = multi.getParameter("Desc1");
  • out.print("檔案名稱為:"+ strFileName+" 檔案型態為:"+ strContentType +
  • "檔案的敘述:"+strDescription +"<br>");
  • %>
  • </body>
  • </html>
slide11
使用JSP檔案上傳套件上傳檔案-處理多個上傳檔案使用JSP檔案上傳套件上傳檔案-處理多個上傳檔案
  • 在HTML表單上傳的檔案可能不只一個,JSP程式可以使用getFileNames()方法取得所有HTML檔案標籤name屬性值的Enumeration物件,然後配合while迴圈取出所有上傳檔案的相關資訊,如下所示:

Enumeration files = mreq.getFileNames();

while ( files.hasMoreElements() ) {

String name = (String)files.nextElement();

………….

}

slide12
範例
  • <!-- JSP程式:Ch12_3_3.jsp -->
  • <%@ page contentType="text/html; charset=MS950"%>
  • <%@ page import="java.util.*"%>
  • <%@ page import="com.oreilly.servlet.MultipartRequest"%>
  • <html>
  • <head><title>Ch12_3_3.jsp</title></head>
  • <body>
  • <%
  • int fcount = 0; // 計算上傳檔案數
  • // 指定上傳目錄
  • String path = application.getRealPath("/");
  • int maxSize = 2*1024*1024; // 上傳檔案最大尺寸為2MB
  • // 建立MultipartRequest物件
  • MultipartRequest mreq = new MultipartRequest(request, path, maxSize, "MS950");
  • // 取得表單欄位值
  • String str = mreq.getParameter("description");
  • out.print("說明: " + str + "<br>");
  • // 使用Enumeration物件取得上傳檔案資訊
  • Enumeration files = mreq.getFileNames();
  • while ( files.hasMoreElements() ) {
  • String name = (String)files.nextElement();
  • str = mreq.getFilesystemName(name); // 取得檔名
  • if ( str != null ) { // 檔名不是null
  • fcount++; // 上傳檔案數加一
  • out.print("編號: (" + fcount + ")<br>");
  • out.print("檔名: " + str + "<br>");
  • str = mreq.getContentType(name); // 取得型態
  • out.print("型態: " + str + "<br>");
  • }
  • }
  • out.print("上傳檔案數: " + fcount + "<br>");
  • %>
  • </body>
  • </html>