1. 程式人生 > >表單中檔案上傳和下載

表單中檔案上傳和下載

檔案上傳和下載的實質:檔案拷貝

檔案上傳:從本地拷貝到伺服器磁碟上   客戶端需要編寫檔案上傳表單---->服務端需要編寫程式碼接受上傳的檔案

檔案下載:從伺服器磁碟上拷貝到本地磁碟   需要編寫服務端的程式碼,客戶端的下載的工作瀏覽器核心解決的

檔案上傳的步驟:(劃重點)

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">