摘要:文件上傳解析請求正文的每部分的內(nèi)容。獲取上傳文件的大小獲取上傳文件對應(yīng)的輸入流把上傳的文件保存到指定文件中。如果上傳的文件超過,用磁盤作為緩存。如果自己用流實現(xiàn)的文件上傳,要在流關(guān)閉后,清理臨時文件。
一、文件的上傳和下載
1、文件上傳的原理分析
1.1文件上傳的必要前提:
a、提供form表單,method必須是post
b、form表單的enctype必須是multipart/form-data
c、提供input type="file"類的上傳輸入域
1.2enctype屬性
作用:告知服務(wù)器請求正文的MIME類型。(請求消息頭:Content-Type作用是一致的)
可選值:
?application/x-www-form-urlencoded(默認(rèn)):
正文:name=admin&password=123
服務(wù)器獲取數(shù)據(jù):String name = request.getParameter("name");
?multipart/form-data:
正文:
服務(wù)器獲取數(shù)據(jù):request.getParameter(String)方法獲取指定的表單字段字符內(nèi)容,但文件上傳表單已經(jīng)不在是字符內(nèi)容,而是字節(jié)內(nèi)容,所以失效。
文件上傳:解析請求正文的每部分的內(nèi)容。
2、借助第三方的上傳組件實現(xiàn)文件上傳
2.1 fileupload概述
fileupload是由apache的commons組件提供的上傳組件。它最主要的工作就是幫我們解析request.getInputStream()。
導(dǎo)入commons-fileupload相關(guān)jar包
?commons-fileupload.jar,核心包;
?commons-io.jar,依賴包。
2.2 fileupload的核心類有:
DiskFileItemFactory、ServletFileUpload、FileItem。
a、解析原理
2.2 fileupload簡單應(yīng)用
使用fileupload組件的步驟如下:
1.創(chuàng)建工廠類DiskFileItemFactory對象:
DiskFileItemFactory factory = new DiskFileItemFactory()
2.使用工廠創(chuàng)建解析器對象:
ServletFileUpload fileUpload = new ServletFileUpload(factory)
3.使用解析器來解析request對象:
List
FileItem對象對應(yīng)一個表單項(表單字段)??梢允俏募侄位蚱胀ㄗ侄?br>?boolean isFormField():判斷當(dāng)前表單字段是否為普通文本字段,如果返回false,說明是文件字段;
?String getFieldName():獲取字段名稱,例如:,返回的是username;
?String getString():獲取字段的內(nèi)容,如果是文件字段,那么獲取的是文件內(nèi)容,當(dāng)然上傳的文件必須是文本文件;
?String getName():獲取文件字段的文件名稱;(a.txt)
?String getContentType():獲取上傳的文件的MIME類型,例如:text/plain。
?int getSize():獲取上傳文件的大小;
?InputStream getInputStream():獲取上傳文件對應(yīng)的輸入流;
?void write(File):把上傳的文件保存到指定文件中。
?delete();
3、文件上傳時要考慮的幾個問題(經(jīng)驗分享)
a、保證服務(wù)器的安全
把保存上傳文件的目錄放在用戶直接訪問不到的地方。
b、避免文件被覆蓋
讓文件名唯一即可
c、避免同一個文件夾中的文件過多
方案一:按照日期進行打散存儲目錄
方案二:用文件名的hashCode計算打散的存儲目錄:二級目錄
d、限制文件的大小:web方式不適合上傳大的文件
單個文件大?。?
ServletFileUpload.setFileSizeMax(字節(jié))
總文件大小:(多文件上傳)
ServletFileUpload.setSizeMax(字節(jié))
e、上傳字段用戶沒有上傳的問題
通過判斷文件名是否為空即可
f、臨時文件的問題
DiskFileItemFactory:
作用:產(chǎn)生FileItem對象
內(nèi)部有一個緩存,緩存大小默認(rèn)是10Kb。如果上傳的文件超過10Kb,用磁盤作為緩存。
存放緩存文件的目錄在哪里?默認(rèn)是系統(tǒng)的臨時目錄。
如果自己用IO流實現(xiàn)的文件上傳,要在流關(guān)閉后,清理臨時文件。
FileItem.delete();
4、文件的下載
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72528.html
摘要:中主要是使用語言。將的動態(tài)功能和標(biāo)準(zhǔn)的安全性引入大型網(wǎng)絡(luò)應(yīng)用的開發(fā)集成部署和管理之中。提供了一個圖形界面的管理工具,稱為信息服務(wù)管理器,可用于監(jiān)視配置和控制服務(wù)。 一、基本概念 1.1、WEB開發(fā)的相關(guān)知識 WEB,在英語中web即表示網(wǎng)頁的意思,它用于表示Internet主機上供外界訪問的資源?! nternet上供外界訪問的Web資源分為: 靜態(tài)web資源(如html 頁面...
摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...
閱讀 800·2023-04-26 00:30
閱讀 2709·2021-11-23 09:51
閱讀 1056·2021-11-02 14:38
閱讀 2596·2021-09-07 10:23
閱讀 2254·2021-08-21 14:09
閱讀 1395·2019-08-30 10:57
閱讀 1611·2019-08-29 11:20
閱讀 1160·2019-08-26 13:53