大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java文件上傳與文件下載的方法

Java文件上傳與文件下載的方法

更新時(shí)間:2020-11-26 15:53:20 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2268次

數(shù)據(jù)上傳是客戶端向服務(wù)器端上傳數(shù)據(jù),客戶端向服務(wù)器發(fā)送的所有請(qǐng)求都屬于數(shù)據(jù)上傳。文件上傳是數(shù)據(jù)上傳的一種特例,指客戶端向服務(wù)器上傳文件。即將保存在客戶端的文件上傳一個(gè)副本到服務(wù)器,并保存在服務(wù)器中。

java文件上傳下載視頻

1. 上傳表單要求

文件上傳要求客戶端提交特殊的請(qǐng)求——multipart請(qǐng)求,即包含多部分?jǐn)?shù)據(jù)的請(qǐng)求。必須將

標(biāo)簽的enctype屬性值設(shè)為“multipart/form-data”,enctype表示encodingType,及編碼類(lèi)型

由于客戶端上傳文件的大小是不確定的,所以http協(xié)議規(guī)定,文件上傳的數(shù)據(jù)要存放于請(qǐng)求正文中,不能出現(xiàn)在URL地址欄內(nèi)。也就是說(shuō),想要上傳文件必須提交POST請(qǐng)求。

表單中要有標(biāo)簽

注意:multipart/form-data請(qǐng)求與普通請(qǐng)求不同

2. 下載文件上傳jar包并查看官方文檔

打開(kāi)Apache官網(wǎng)http://www.apache.org/,選擇APACHE PROJECT LIST中的Commons

java文件上傳下載視頻

選擇Commons中的FileUpload項(xiàng)目,并下載jar包和源文件

java文件上傳下載視頻

java文件上傳下載視頻

查看FileUpload的工作方式

java文件上傳下載視頻

查看FileUpload項(xiàng)目的API

java文件上傳下載視頻

3. 使用第三方j(luò)ar包上傳文件

public?class?RegisterServlet?extends?HttpServlet?{
??private?static?final?long?serialVersionUID?=?1L;
??public?RegisterServlet()?{
????super();
??}
??protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
????throws?ServletException,?IOException?{
????response.getWriter().append("Served?at:?").append(request.getContextPath());
??}
??protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
????throws?ServletException,?IOException?{
????//第一步、判斷請(qǐng)求是否為multipart請(qǐng)求
????if(!ServletFileUpload.isMultipartContent(request))?{
??????throw?new?RuntimeException("當(dāng)前請(qǐng)求只支持文件上傳");
????}
????try?{
??????//第二步、創(chuàng)建FileItem工廠
??????DiskFileItemFactory?factory?=?new?DiskFileItemFactory();
??????//設(shè)置臨時(shí)文件存儲(chǔ)目錄
??????String?path?=?this.getServletContext().getRealPath("/Temp");
??????File?temp?=?new?File(path);
??????factory.setRepository(temp);
??????//單位:字節(jié)。本例設(shè)置邊界值為2MB,超過(guò)該值會(huì)創(chuàng)建臨時(shí)文件
??????factory.setSizeThreshold(1024*1024*2);
??????//第三步、創(chuàng)建文件上傳核心組件
??????ServletFileUpload?upload?=?new?ServletFileUpload(factory);
??????//設(shè)置item的頭部字符編碼,解決中文亂碼問(wèn)題
??????upload.setHeaderEncoding("utf-8");
??????//設(shè)置單個(gè)上傳文件的最大值為5MB
??????upload.setFileSizeMax(1024*1024*5);
??????//設(shè)置一次上傳所有文件總和的最大值為10MB(上傳多個(gè)文件時(shí)起作用)
??????upload.setFileSizeMax(1024*1024*10);
??????//第四步、解析請(qǐng)求獲取所有的item
??????List?items?=?upload.parseRequest(request);
??????//第五步、遍歷item
??????for(FileItem?item:items)?{
????????if?(item.isFormField())?{
????????????processFormField(item);
??????????}?else?{
????????????processUploadedFile(item);
??????????}
??????}
????}?catch?(FileUploadException?e)?{
??????e.printStackTrace();
????}
??}
??private?void?processFormField(FileItem?item)?{
????try?{
??????String?name?=?item.getFieldName();
??????//解決中文亂碼問(wèn)題
??????String?value?=?item.getString("utf-8");
??????System.out.println(name+"="+value);
????}?catch?(UnsupportedEncodingException?e)?{
??????e.printStackTrace();
????}
??}
??private?void?processUploadedFile(FileItem?item)?{
????try?{
??????InputStream?inputStream?=?item.getInputStream();
??????String?fieldName?=?item.getFieldName();
??????//獲取上傳文件原始名稱
??????String?fileName?=?item.getName();
??????//解決文件同名問(wèn)題
??????fileName?=?System.currentTimeMillis()+fileName;
??????String?contentType?=?item.getContentType();
??????boolean?isInMemory?=?item.isInMemory();
??????long?sizeInBytes?=?item.getSize();
??????String?path?=?this.getServletContext().getRealPath("/UploadContent");
??????//Date?now?=?new?Date();
??????Calendar?now?=?Calendar.getInstance();
??????//對(duì)上傳的文件進(jìn)行分類(lèi)管理
??????path?+=?"/"+now.get(Calendar.YEAR)+"/"+(now.get(Calendar.MONTH)+1)+"/"+now.get(Calendar.DAY_OF_MONTH);
??????//若目錄不存在,則創(chuàng)建該目錄
??????File?directory?=?new?File(path);
??????if(!directory.exists())?{
????????directory.mkdirs();
??????}
??????File?descFile?=?new?File(path,fileName);
??????OutputStream?outputStream?=?new?FileOutputStream(descFile);
??????int?length?=?-1;
??????byte[]?buffer?=?new?byte[1024];
??????while((length=inputStream.read(buffer))!=-1)?{
????????outputStream.write(buffer,?0,?length);
??????}
??????outputStream.close();
??????inputStream.close();
??????//刪除臨時(shí)文件
??????item.delete();
????}?catch?(IOException?e)?{
??????e.printStackTrace();
????}
??}
}

Java文件下載

數(shù)據(jù)下載是客戶端從服務(wù)器獲取數(shù)據(jù),服務(wù)器向客戶端發(fā)送的所有響應(yīng)都屬于數(shù)據(jù)下載。文件下載是數(shù)據(jù)下載的一種特例,指客戶端從服務(wù)器下載文件,即將保存在服務(wù)器的文件下載一個(gè)副本到客戶端。通常我們對(duì)服務(wù)器所發(fā)出的請(qǐng)求,大多是文件下載請(qǐng)求,從服務(wù)器中下載文本、圖片、聲音、視頻等文件,客戶端瀏覽器對(duì)這些文件進(jìn)行解析后,我們才能看到多媒體信息。

1. 超鏈接下載

瀏覽器能解析的文件會(huì)直接顯示,如:pdf、jpg......

瀏覽器解析不了的文件會(huì)被另存為,如:rar、exe......

瀏覽器版本不一樣,對(duì)文件的解析能力也不同

缺點(diǎn):下載內(nèi)容的形式(直接顯示/另存為)由瀏覽器決定,跟服務(wù)器無(wú)關(guān)

2. Servlet方式下載

設(shè)置響應(yīng)頭部屬性content-disposition值為attachment

獲取連接服務(wù)器源文件的輸入流

獲取輸出流

將輸入流中的數(shù)據(jù)寫(xiě)到輸出流中

public?class?DownloadServlet?extends?HttpServlet?{
??private?static?final?long?serialVersionUID?=?1L;
??public?DownloadServlet()?{
????super();
??}
??protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
????throws?ServletException,?IOException?{
????//設(shè)置響應(yīng)的頭部屬性content-disposition值為attachment
????//使用filename來(lái)指定文件名
????String?filename?=?"超跑.png";
????byte[]?bytes?=?filename.getBytes("utf-8");
????//http協(xié)議規(guī)定瀏覽器只能接受ISO8859-1類(lèi)型的字節(jié)數(shù)據(jù)
????filename?=?new?String(bytes,"ISO8859-1");
????response.setHeader("content-disposition",?"attachment;filename="+filename);
????//獲取連接服務(wù)器資源文件的輸入流
????InputStream?is?=?request.getServletContext().getResourceAsStream("/Resources/BS架構(gòu)原理圖1.png");
????//獲取輸出流
????ServletOutputStream?os?=?response.getOutputStream();
????//將輸入流中的數(shù)據(jù)寫(xiě)到輸出流中
????int?length?=?-1;
????byte[]?buffer?=?new?byte[1024];
????while((length=is.read(buffer))!=-1)?{
??????os.write(buffer,0,length);
????}
????os.close();
????is.close();
??}
??protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
????throws?ServletException,?IOException?{
????doGet(request,?response);
??}
}

java文件上傳下載視頻

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java文件上傳與文件下載的方法”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩一区国产二区欧美三 | 亚洲色四在线视频观看 | 天天视频入口 | 视频一区二区国产 | 国产精品久久久亚洲动漫 | 天天射天天干天天色 | 亚洲精品第五页中文字幕 | 欧美精品福利在线视频 | 日日摸夜夜爽人人添 | 四虎永久在线精品视频播放 | a毛片免费全部在线播放毛 a毛片免费在线观看 | 久久精品这里是免费国产 | 亚洲天天网综合自拍图片专区 | 天天干夜夜谢 | 91精品欧美产品免费观看 | 亚洲国产品综合人成综合网站 | 5x性区m免费毛片视频看看 | 久热这里只精品99国产6_99 | 在线观看国产福利 | 国产精品美女久久久久久 | 精品在线免费视频 | 亚洲精品色综合色在线观看 | 午夜精品久久久久久久90蜜桃 | 末成年娇小性色xxxxx视频 | 亚洲精品线在线观看 | 精品手机在线 | 激情综合色综合啪啪开心 | 日本一本一区二区 | 久久久久久麻豆 | 中文字幕亚洲一区二区va在线 | 亚洲欧美日韩综合一区久久 | 天天欲色成人综合网站 | 青青草免费视频在线播放 | 久久成人免费网站 | 欧美一级成人影院免费的 | 国产精品久久久久久永久牛牛 | 欧美午夜视频一区二区三区 | 亚洲欧美日韩中文v在线 | 激情综合色综合久久综合 | 亚洲狠狠成人综合网 | 久9热精品视频在线观看 |