文件上傳原理

1. 原理:

(個人概述:前臺用form表單,將文件放在request中。後臺用request.getInputStream()從request中獲取文件,主要是讀取文件流,再將文件流寫到指定文件路徑下。
衆所周知,在客戶端代碼中需要使用<input type='file' name='file' />來選擇要上傳的文件,並上傳,代碼如上:
<form action="servlet/UploadFile" method="post"
            enctype
="multipart/form-data">
            
<input type="file" name="file1" id="file1" />
            
<input type="file" name="file2" id="file2" />
            
<input type="submit" value="上傳" />
</form>
在上傳文件時,<form>標籤必須加上enctype="multipart/form-data",否則瀏覽器無法將文件內容上傳到服務端。在ServletdoPost方法中編寫如下的代碼
public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        java.io.InputStream is = request.getInputStream();
        java.io.FileOutputStream fos = new java.io.FileOutputStream("d:\\out.txt");
        
        byte[] buffer = new byte[8192];
        int count = 0;
        while((count = is.read(buffer)) >0)
        {
            fos.write(buffer, 0, count);
        }        
        fos.close();
    }

2.爲什麼上傳文件要加一個屬性enctype="multipart/form-data"

首先知道enctype這個屬性管理的是表單的MIME編碼。共有三個值可選:
1、application/x-www-form-urlencoded
其中application/x-www-form-urlencoded是默認值,作用是設置表單傳輸的編碼。
2、multipart/form-data
而multipart/form-data是用來制定傳輸數據的特殊類型的,主要就是我們上傳的非文本的內容
3、text/plain
text/plain是純文本傳輸的意思,在發郵件的時候要設置這種編碼類型

3.後臺對以上三種的獲取方式:

大家經常 用servlet和jsp,但是對 request.getInputStream()和request.getReader()比較陌生。
request.getParameter() 
request.getInputStream()
request.getReader()
這 三個方法都是從request對象中得到提交的數據,但是用途不同,要根據<form>表單提交數據的編碼方式選擇不同的方法。
分別對應:application/x-www-form-urlencoded;    multipart/form-data;          text/plain
發佈了25 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章