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