1. 程式人生 > 其它 >【資料採集】第三次實驗

【資料採集】第三次實驗

檔案的上傳和下載,是非常常見餓的功能。很多系統中,或者軟體中都經常使用檔案的上傳和下載。

(比如:QQ頭像,就是使用了上傳)

檔案的上傳介紹

1.要有一個form標籤:method=post請求(使用post請求的原因:是post請求不限制url地址的長度)

2.form標籤的encType屬性值必須為multipart/form-data值

3.在form標籤中使用input type=file新增上傳的檔案

4.編寫伺服器程式碼接收,處理上傳的資料

(jsp頁面)

enctype="multipart/form-data"

】表示提交的資料,以多段(每一個表單項一個數據段)的形式進行拼接,然後以二進位制流的形式傳送給伺服器。

http協議內容(尚矽谷網課資料)

(上傳的資料不在頁面中顯示是因為資料的長度太長,需要使用伺服器讀取)

使用流的形式進行上傳,伺服器只能用流的形式進行讀取

伺服器對接收到的資訊進行解析

需要使用jar包自動進行解析

1.commons-fileupload.jar

commons-fileupload.jar 需要依賴 commons-io.jar 這個包,所以兩個包我們都要引入。 第一步,就是需要匯入兩個 jar 包:   commons-fileupload-1.2.1.jar   commons-io-1.4.jar commons-fileupload.jar 和 commons-io.jar 包中,我們常用的類有哪些? ServletFileUpload 類,用於解析上傳的資料。 FileItem 類,表示每一個表單項。 boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);   判斷當前上傳的資料格式是否是多段的格式。 public List<FileItem> parseRequest(HttpServletRequest request)   解析上傳的資料 boolean FileItem.isFormField()   判斷當前這個表單項,是否是普通的表單項。還是上傳的檔案型別。   true 表示普通型別的表單項   false 表示上傳的檔案型別 String FileItem.getFieldName()   獲取表單項的 name 屬性值String FileItem.getString()   獲取當前表單項的值。 String FileItem.getName();   獲取上傳的檔名 void FileItem.write( file );   將上傳的檔案寫到 引數 file 所指向抽硬碟位置 。 程式碼:

檔案的下載

下載的原理(尚矽谷資料):

程式碼:

下載檔案中文亂碼問題解決方案:

方案一:URLEncoder 解決 IE 和谷歌瀏覽器的 附件中 文名問題。 如果客戶端瀏覽器是 IE 瀏覽器 或者 是谷歌瀏覽器。我們需要使用 URLEncoder 類先對中文名進行 UTF-8 的編碼 操作。 因為 IE 瀏覽器和谷歌瀏覽器收到含有編碼後的字串後會以 UTF-8 字符集進行解碼顯示 // 把中文名進行 UTF-8 編碼操作。 String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8"); // 然後把編碼後的字串設定到響應頭中 response.setHeader("Content-Disposition", str); 方案二:BASE64 編解碼 解決 火狐瀏覽器的附件中文名問 題 如果客戶端瀏覽器是火狐瀏覽器。 那麼我們需要對中文名進行 BASE64 的編碼操作。 這時候需要把請求頭 Content-Disposition: attachment; filename=中文名 編碼成為:Content-Disposition: attachment; filename==?charset?B?xxxxx?= =?charset?B?xxxxx?=   現在我們對這段內容進行一下說明。 =?           表示編碼內容的開始 charset         表示字符集 B            表示 BASE64 編碼 xxxx          表示檔名 BASE64 編碼後的內容 ?=           表示編碼內容的結束