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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java文件上傳與文件下載的方法

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

更新時間:2020-11-26 15:53:20 來源:動力節點 瀏覽2341次

數據上傳是客戶端向服務器端上傳數據,客戶端向服務器發送的所有請求都屬于數據上傳。文件上傳是數據上傳的一種特例,指客戶端向服務器上傳文件。即將保存在客戶端的文件上傳一個副本到服務器,并保存在服務器中。

java文件上傳下載視頻

1. 上傳表單要求

文件上傳要求客戶端提交特殊的請求——multipart請求,即包含多部分數據的請求。必須將

標簽的enctype屬性值設為“multipart/form-data”,enctype表示encodingType,及編碼類型

由于客戶端上傳文件的大小是不確定的,所以http協議規定,文件上傳的數據要存放于請求正文中,不能出現在URL地址欄內。也就是說,想要上傳文件必須提交POST請求。

表單中要有標簽

注意:multipart/form-data請求與普通請求不同

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

打開Apache官網http://www.apache.org/,選擇APACHE PROJECT LIST中的Commons

java文件上傳下載視頻

選擇Commons中的FileUpload項目,并下載jar包和源文件

java文件上傳下載視頻

java文件上傳下載視頻

查看FileUpload的工作方式

java文件上傳下載視頻

查看FileUpload項目的API

java文件上傳下載視頻

3. 使用第三方jar包上傳文件

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?{
????//第一步、判斷請求是否為multipart請求
????if(!ServletFileUpload.isMultipartContent(request))?{
??????throw?new?RuntimeException("當前請求只支持文件上傳");
????}
????try?{
??????//第二步、創建FileItem工廠
??????DiskFileItemFactory?factory?=?new?DiskFileItemFactory();
??????//設置臨時文件存儲目錄
??????String?path?=?this.getServletContext().getRealPath("/Temp");
??????File?temp?=?new?File(path);
??????factory.setRepository(temp);
??????//單位:字節。本例設置邊界值為2MB,超過該值會創建臨時文件
??????factory.setSizeThreshold(1024*1024*2);
??????//第三步、創建文件上傳核心組件
??????ServletFileUpload?upload?=?new?ServletFileUpload(factory);
??????//設置item的頭部字符編碼,解決中文亂碼問題
??????upload.setHeaderEncoding("utf-8");
??????//設置單個上傳文件的最大值為5MB
??????upload.setFileSizeMax(1024*1024*5);
??????//設置一次上傳所有文件總和的最大值為10MB(上傳多個文件時起作用)
??????upload.setFileSizeMax(1024*1024*10);
??????//第四步、解析請求獲取所有的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();
??????//解決中文亂碼問題
??????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();
??????//解決文件同名問題
??????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();
??????//對上傳的文件進行分類管理
??????path?+=?"/"+now.get(Calendar.YEAR)+"/"+(now.get(Calendar.MONTH)+1)+"/"+now.get(Calendar.DAY_OF_MONTH);
??????//若目錄不存在,則創建該目錄
??????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();
??????//刪除臨時文件
??????item.delete();
????}?catch?(IOException?e)?{
??????e.printStackTrace();
????}
??}
}

Java文件下載

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

1. 超鏈接下載

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

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

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

缺點:下載內容的形式(直接顯示/另存為)由瀏覽器決定,跟服務器無關

2. Servlet方式下載

設置響應頭部屬性content-disposition值為attachment

獲取連接服務器源文件的輸入流

獲取輸出流

將輸入流中的數據寫到輸出流中

public?class?DownloadServlet?extends?HttpServlet?{
??private?static?final?long?serialVersionUID?=?1L;
??public?DownloadServlet()?{
????super();
??}
??protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
????throws?ServletException,?IOException?{
????//設置響應的頭部屬性content-disposition值為attachment
????//使用filename來指定文件名
????String?filename?=?"超跑.png";
????byte[]?bytes?=?filename.getBytes("utf-8");
????//http協議規定瀏覽器只能接受ISO8859-1類型的字節數據
????filename?=?new?String(bytes,"ISO8859-1");
????response.setHeader("content-disposition",?"attachment;filename="+filename);
????//獲取連接服務器資源文件的輸入流
????InputStream?is?=?request.getServletContext().getResourceAsStream("/Resources/BS架構原理圖1.png");
????//獲取輸出流
????ServletOutputStream?os?=?response.getOutputStream();
????//將輸入流中的數據寫到輸出流中
????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文件上傳下載視頻

以上就是動力節點java培訓機構的小編針對“Java文件上傳與文件下載的方法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 色日韩在线 | 久久精品综合视频 | 久久香焦| 夜夜操天天干 | 偷偷操不一样的久久 | 久久99精品久久久久久臀蜜桃 | 夜夜天堂| 久操视频在线观看免费 | 国产精品福利视频一区二区三区 | 国产91在线精品 | 麻豆传煤一区免费入 | 久久久婷婷 | 久久午夜夜伦伦鲁鲁片 | 国产第一区二区三区在线观看 | 免费高清一级欧美片在线观看 | 日韩午夜网站 | 香蕉视频国产 | 草草在线观看视频 | 欧美日韩第三页 | 青青热久久国产久精品秒播 | 伊人精品 | 国产毛片久久国产 | 久久伊人成人 | 色哦色哦哦色天天综合 | 国产福利视频网站 | 久久中文网| 亚洲视频在线一区 | 国产一区日韩二区欧美三 | 香港a毛片免费全部播放 | 久操久热 | 成人久久免费视频 | 免费观看成人碰视频公开 | 国产日韩欧美在线观看免费视频 | 亚洲国产成人久久笫一页 | 天天干夜夜操视频 | 国产综合色在线视频播放线视 | 在线观看国产91 | 亚洲综合视频一区 | 国产国语高清在线视频二区 | 四虎国产永久在线观看 | 国产99视频精品一区 |