SpringMVC(二)— 文件上傳

傳統文件上傳回顧:

  1. 導入文件上傳的jar包
	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.1</version>
	</dependency>
	<dependency>
		<groupId>commons-io</groupId>
		<artifactId>commons-io</artifactId>
		<version>2.4</version>
	</dependency>
  1. 編寫文件上傳的JSP頁面
<h3>文件上傳</h3>
<form action="user/fileupload" method="post" enctype="multipart/form-data">
選擇文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上傳文件"/>
</form>
  1. 編寫文件上傳的Controller控制器
	/**
	* 文件上傳
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload")
	public String fileupload(HttpServletRequest request) throws Exception {
		// 先獲取到要上傳的文件目錄
		String path = request.getSession().getServletContext().getRealPath("/uploads");
		// 創建File對象,一會向該路徑下上傳文件
		File file = new File(path);
		// 判斷路徑是否存在,如果不存在,創建該路徑
		if(!file.exists()) {
			file.mkdirs();
		}
		// 創建磁盤文件項工廠
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		// 解析request對象
		List<FileItem> list = fileUpload.parseRequest(request);
		// 遍歷
		for (FileItem fileItem : list) {
		// 判斷文件項是普通字段,還是上傳的文件
		if(fileItem.isFormField()) {
			}else {
			// 上傳文件項
			// 獲取到上傳文件的名稱
			String filename = fileItem.getName();
			// 上傳文件
			fileItem.write(new File(file, filename));
			// 刪除臨時文件
			fileItem.delete();
			}
		}
		return "success";
	}

SpringMVC傳統方式文件上傳

  1. SpringMVC框架提供了MultipartFile對象,該對象表示上傳的文件,要求變量名稱必須和表單file標籤的
    name屬性名稱相同。
  2. 代碼如下
	/**
	* SpringMVC方式的文件上傳
	*
	* @param request
	* @return
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload2")
	public String fileupload2(HttpServletRequest request,MultipartFile upload) throws Exception {
		System.out.println("SpringMVC方式的文件上傳...");
		// 先獲取到要上傳的文件目錄
		String path = request.getSession().getServletContext().getRealPath("/uploads");
		// 創建File對象,一會向該路徑下上傳文件
		File file = new File(path);
		// 判斷路徑是否存在,如果不存在,創建該路徑
		if(!file.exists()) {
			file.mkdirs();
		}
		// 獲取到上傳文件的名稱
		String filename = upload.getOriginalFilename();
		String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
		// 把文件的名稱唯一化
		filename = uuid+"_"+filename;
		// 上傳文件
		upload.transferTo(new File(file,filename));
		return "success";
	}
  1. 配置文件解析器對象
<!-- 配置文件解析器對象,要求id名稱必須是multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
</bean>

SpringMVC跨服務器方式文件上傳

  1. 搭建圖片服務器
    1. 根據文檔配置tomcat9的服務器,現在是2個服務器
    2. 導入資料中day02_springmvc5_02image項目,作爲圖片服務器使用
  2. 實現SpringMVC跨服務器方式文件上傳
    1. 導入開發需要的jar包
	<dependency>
		<groupId>com.sun.jersey</groupId>
		<artifactId>jersey-core</artifactId>
		<version>1.18.1</version>
	</dependency>
	<dependency>
		<groupId>com.sun.jersey</groupId>
		<artifactId>jersey-client</artifactId>
		<version>1.18.1</version>
	</dependency>
  1. 編寫文件上傳的JSP頁面
	<h3>跨服務器的文件上傳</h3>
	<form action="user/fileupload3" method="post" enctype="multipart/form-data">
		選擇文件:<input type="file" name="upload"/><br/>
		<input type="submit" value="上傳文件"/>
	</form>
  1. 編寫控制器
	/**
	* SpringMVC跨服務器方式的文件上傳
	*
	* @param request
	* @return
	* @throws Exception
	*/
	@RequestMapping(value="/fileupload3")
	public String fileupload3(MultipartFile upload) throws Exception {
		System.out.println("SpringMVC跨服務器方式的文件上傳...");
		// 定義圖片服務器的請求路徑
		String path = "http://localhost:9090/day02_springmvc5_02image/uploads/";
		// 獲取到上傳文件的名稱
		String filename = upload.getOriginalFilename();
		String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
		// 把文件的名稱唯一化
		filename = uuid+"_"+filename;
		// 向圖片服務器上傳文件
		// 創建客戶端對象
		Client client = Client.create();
		// 連接圖片服務器
		WebResource webResource = client.resource(path+filename);
		// 上傳文件
		webResource.put(upload.getBytes());
		return "success";
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章