表單中檔案上傳和下載
檔案上傳和下載的實質:檔案拷貝
檔案上傳:從本地拷貝到伺服器磁碟上 客戶端需要編寫檔案上傳表單---->服務端需要編寫程式碼接受上傳的檔案
檔案下載:從伺服器磁碟上拷貝到本地磁碟 需要編寫服務端的程式碼,客戶端的下載的工作瀏覽器核心解決的
檔案上傳的步驟:(劃重點)
1.客端的form表單method="post",enctype="multipart/form-data"(檔案上傳表單)
2.匯入jar包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar
3.伺服器端:
1).建立磁碟檔案工廠:DiskFileItemFactory
2).建立檔案上傳核心類:ServletFileUpload
3).解析request集合(有普通表單項,檔案項):.parseRequest(request);
4).遍歷FileItem集合:List<FileItem>
5).判斷普通表單項/檔案上傳:.isFormField();
// 接收上傳檔案 try { // 1.建立磁碟檔案工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2.建立檔案上傳核心類 ServletFileUpload upload = new ServletFileUpload(factory); // 3.解析request集合(有普通表單項,檔案項) List<FileItem> FileItems = upload.parseRequest(request); // 4.遍歷FileItem集合 for (FileItem fileItem : FileItems) { // 5.判斷普通表單項/檔案上傳 boolean bool = fileItem.isFormField(); if (bool) {// 普通表單項 String name = fileItem.getFieldName(); String value = fileItem.getString("UTF-8");// 設定普通表單項的編碼方式 System.out.println(name + "----" + value); } else {// 檔案項 String filename = fileItem.getName();// 得到檔名稱 InputStream in = fileItem.getInputStream();// 得到檔案輸入流 String path = this.getServletContext().getRealPath("/upload");// 檔案存放的資料夾地址 OutputStream out = new FileOutputStream(path + "/" + filename);// 檔案存放的地址 // 檔案拷貝的模板程式碼 int len = 0; byte[] buffer = new byte[1024]; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close(); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); }
檔案上傳API:
//接收上傳檔案 try { //1.建立磁碟檔案工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); //設定快取大小,單位是位元組 factory.setSizeThreshold(1024*1024); //設定臨時檔案目錄 factory.setRepository(new File("/temporaryfile")); //2.建立檔案上傳核心類 ServletFileUpload upload = new ServletFileUpload(factory); boolean bool = upload.isMultipartContent(request);//判斷否是一個檔案上傳表單 upload.setHeaderEncoding("UTF-8");//設定檔名的編碼方式 if(bool){ //3.解析request集合(有普通表單項,檔案項) List<FileItem> FileItems = upload.parseRequest(request); //4.遍歷FileItem集合 for (FileItem fileItem : FileItems) { //5.判斷普通表單項/檔案上傳 boolean isFormField = fileItem.isFormField(); if(isFormField){//普通表單項 String name = fileItem.getFieldName(); String value = fileItem.getString("UTF-8");//設定普通表單項的編碼方式 System.out.println(name+"----"+value); }else{//檔案項 fileItem.delete();//刪除臨時檔案 String filename = fileItem.getName();//得到檔名稱 InputStream in = fileItem.getInputStream();//得到檔案輸入流 String path = this.getServletContext().getRealPath("/upload");//檔案存放的資料夾地址 OutputStream out = new FileOutputStream(path+"/"+filename);//檔案存放的地址 /*//檔案拷貝的模板程式碼 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); }*/ IOUtils.copy(in, out);//檔案拷貝(通過工具類) in.close(); out.close(); } } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); }
檔案下載API
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取檔名稱
String filename = request.getParameter("filename");
System.out.println(filename);
//要下載的這個檔案的型別-----客戶端通過檔案的MIME型別去區分型別
response.setContentType(this.getServletContext().getMimeType(filename));
//告訴客戶端該檔案不是直接解析 而是以附件形式開啟(下載)
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//獲取檔案的絕對路徑
String path = this.getServletContext().getRealPath("/download/"+filename);
System.out.println(path);
//獲得該檔案的輸入流
InputStream in = new FileInputStream(path);
//獲得輸出流---通過response獲得的輸出流 用於向客戶端寫內容
ServletOutputStream out = response.getOutputStream();
//檔案拷貝的模板程式碼
int len = 0;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
// out.close();在servlet的response中ServletOutputStream使用完後會自動關閉,因為out是從servlet中獲取的
}
相關推薦
表單中檔案上傳和下載
檔案上傳和下載的實質:檔案拷貝 檔案上傳:從本地拷貝到伺服器磁碟上 客戶端需要編寫檔案上傳表單---->服務端需要編寫程式碼接受上傳的檔案 檔案下載:從伺服器磁碟上拷貝到本地磁碟 需要編寫服務端的程式碼,客戶端的下載的工作瀏覽器核心解決的
Spring MVC中檔案上傳和下載
檔案上傳 檔案上傳需將表格的提交方式設為"POST",並且將enctype設為"multipart/form-data",以二進位制的方式提交資料。 spring mvc中可通過MultipartResolver監聽每個請求,如有上傳的檔案,則把請求封裝為MultipartH
一個form表單中,上傳和接收多個相同的name欄位引數
一般我們在同一個表單中,都會提交不同的name欄位。可是,我遇到了提交相同欄位的情況,例子如下: <form action="test_receive.php" method="post"> <div> <
Struts2的檔案上傳和下載(1)單檔案上傳
在struts2中整合fileuoload功能,因為在匯入的jar包中包含了common-fileipload.jar檔案 在struts2中的interceptor 中有一個fileupload攔截器,他的主要功能就是完成檔案上傳。 注意事項 method=post
JavaWeb中的檔案上傳和下載
對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,如果直接使用Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩,所以一般選擇採用apache的開源工具common-fileupload這個檔案上傳元件。這個common-fileupl
SSH註解實現單檔案上傳和下載
配置檔案省略 1.上傳頁面 <form action="upload.html" enctype="multipart/form-data" method="post"> 上傳檔案:<input type="file" name
如何在基於Java的Web專案中實現檔案上傳和下載?
在Sevlet 3 以前,Servlet API中沒有支援上傳功能的API,因此要實現上傳功能需要引入第三方工具從POST請求中獲得上傳的附件或者通過自行處理輸入流來獲得上傳的檔案,我們推薦使用Apac
在SpringMVC框架中實現檔案上傳和下載
首先在springmvc.xml中配置檔案上傳的屬性 <!-- 檔案上傳的屬性值 --> <bean id="multipartResolver" class="org.springframework.web.multi
Android中關於FTP的檔案上傳和下載
package ryancheng.example.progressbar; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; impo
Java中,當表單含有檔案上傳時,提交資料的如何讀取(吐血版)
int TeamId = 0;// 用於存放輸出的資訊String message = "";// 在自己的專案中構造出一個用於存放使用者照片的資料夾String projectpath = this.getServletContext().getRealPath("/he
c#中winform方式的檔案上傳和下載高效最新方法
網上很多檔案上傳下載的文章,多數是採用http方式,使用.net的webcliend的功能,此功能對大檔案效率比較低,對web伺服器安全性也有影響。 我採用資料庫的方式同樣實現並高效的處理了此功能,對於資料庫winform應用值得借鑑。 開發思路(以下思路是c/s三層架構,
javaExcel檔案上傳和下載
上傳在頁面必須加上下面屬性 <form method="post" enctype="multipart/form-data" target="frameFile" action="${vehiclePath }/bindVehicle?${_csrf.parameterName}=$
xshell 檔案上傳和下載
xshell 檔案上傳和下載 介紹兩種方式:命令、工具 上傳和下載參照物件是本機 命令: 1.sz 檔案下載(檔案大小限制 4G) 2.rz 檔案上傳 工具: File Transfer(工具欄中有) 這個沒有上
SpringMVC檔案上傳和下載
1. 檔案上傳 SpringMVC通過MultipartResolver來實現檔案上傳,預設沒有裝配,使用MultipartResolver需要加上commons-fileupload這個jar包。 1.1 配置MultipartResolver <!--配置上傳檔案控制元
**#使用springboot進行檔案上傳和下載**
使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋
JQuery ajax提交form表單實現檔案上傳
<!DOCTYPE html> <html> <head> <title></title> <script src="https://cdn.bootcss.co
asp.net 檔案上傳和下載管理原始碼
利用asp.net進行檔案上傳和下載時非常常用的功能,現做整理,將原始碼上傳,提供給初學者參考,以下程式碼中的樣式檔案就不上傳了,下載者請將樣式去掉。 效果圖如下: <%@ Page Language="C#" AutoEventWireu
基於OkHttp網路通訊工具類(傳送get、post請求、檔案上傳和下載)
一、為什麼要用OkHttp? okhttp是專注於提升網路連線效率的http客戶端。 優點: 1、它能實現同一ip和埠的請求重用一個socket,這種方式能大大降低網路連線的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。 2、okhttp 對
ASP.NET實現檔案上傳和下載
###### 本文的開發配置 ###### .NET版本:.NET Framework 4.0 開發環境:Microsoft Visual Studio 2013 瀏覽器:IE、Chrome、FireFox等都行 1、搭建網站結構 建立一個新的目錄
Struts2的檔案上傳和下載(2)限制檔案的大小和型別
要在struts.xml中對Action進行配置,要在Action配置中加入檔案過濾攔截器fileUpload。struts.xml的配置資訊如下所示: <package name="struts2" namespace="/" extends="struts-default">