傳統文件上傳回顧:
- 導入文件上傳的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>
- 編寫文件上傳的JSP頁面
<h3>文件上傳</h3>
<form action="user/fileupload" method="post" enctype="multipart/form-data">
選擇文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上傳文件"/>
</form>
- 編寫文件上傳的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傳統方式文件上傳
- SpringMVC框架提供了MultipartFile對象,該對象表示上傳的文件,要求變量名稱必須和表單file標籤的
name屬性名稱相同。
- 代碼如下
/**
* 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";
}
- 配置文件解析器對象
<!-- 配置文件解析器對象,要求id名稱必須是multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
</bean>
SpringMVC跨服務器方式文件上傳
- 搭建圖片服務器
- 根據文檔配置tomcat9的服務器,現在是2個服務器
- 導入資料中day02_springmvc5_02image項目,作爲圖片服務器使用
- 實現SpringMVC跨服務器方式文件上傳
- 導入開發需要的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>
- 編寫文件上傳的JSP頁面
<h3>跨服務器的文件上傳</h3>
<form action="user/fileupload3" method="post" enctype="multipart/form-data">
選擇文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上傳文件"/>
</form>
- 編寫控制器
/**
* 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";
}