一. commons-fileupload組件上傳
1. 導(dǎo)入jar包依賴
<!--文件上傳組件-->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2. 編寫文件上傳的前臺(tái)頁(yè)面
<h3>文件上傳</h3>
<form action="upload" method="post" enctype="multipart/form-data">
選擇文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上傳文件"/>
</form>
3. 編寫Controller控制器
/**
* 組件上傳(commons-fileupload)
* @param request
* @return
* @throws Exception
*/
@PostMapping("upload")
@ResponseBody
public String uploadFile(HttpServletRequest request) throws Exception {
System.out.println("文件上傳 start...");
//上傳位置
String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
//判斷路徑是否存在
File file = new File(realPath);
if(!file.isDirectory()){
//創(chuàng)建文件夾
boolean mkdir = file.mkdir();
System.out.println("位置:"+mkdir+":"+file.getAbsolutePath());
}
//解析request對(duì)象,獲取上傳文件項(xiàng)
//磁盤文件項(xiàng)工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem i:items) {
if(i.isFormField()){
//普通表單項(xiàng),不處理
}else{
//文件上傳項(xiàng)
//獲取上傳文件的名稱
String fileName = i.getName();
fileName = System.currentTimeMillis() + fileName;
System.out.println("文件名:"+fileName);
//上傳
i.write(new File(realPath,fileName));
//刪除臨時(shí)文件
i.delete();
}
}
return "ok";
}
二. SpringMVC文件上傳
1. SpringMVC框架提供了MultipartFile對(duì)象,該對(duì)象表示上傳的文件,要求變量名稱必須和表單?le標(biāo)簽的 name屬性名稱相同。
2.Controller如下:
/**
* springMVC上傳
* @param request
* @param upload
* @return
* @throws IOException
*/
@PostMapping("upload")
@ResponseBody
public String springMVCFileUpload(HttpServletRequest request,MultipartFile upload) throws IOException {
System.out.println("文件上傳 start...");
//上傳位置
String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
//判斷路徑是否存在
File file = new File(realPath);
if(!file.isDirectory()){
//創(chuàng)建文件夾
boolean mkdir = file.mkdir();
System.out.println("創(chuàng)建文件夾"+mkdir+":"+file.getAbsolutePath());
}
//獲取上傳文件的名稱
String fileName = upload.getOriginalFilename();
fileName = System.currentTimeMillis() + fileName;
System.out.println("文件名:"+fileName);
upload.transferTo(new File(realPath,fileName));
return "ok";
}
3.配置文件解析器對(duì)象
<!--配置文件上傳解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--文件上傳大小限制-->
<property name="maxUploadSize" value="10485760"/> <!-- 10M = 10*1024*1024 = 10485760 -->
</bean>
三. SpringMVC跨服務(wù)器文件上傳
1.準(zhǔn)備圖片服務(wù)器(Server-image),并配置允許讀寫操作(以 http://localhost:9090/uploads/ (圖片服務(wù)器的路徑) 為例:)
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<!-- 添加,解決jersey上傳服務(wù)器403錯(cuò)誤 -->
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

web.xml
2.編寫控制類
/**
* 跨域上傳
* @param upload
* @return
* @throws IOException
*/
@PostMapping("upload")
@ResponseBody
public String httpFileUpload(MultipartFile upload) throws IOException {
System.out.println("文件上傳 start...");
// 上傳位置
String realPath = "http://localhost:9090/uploads/";
String fileName = System.currentTimeMillis() + upload.getOriginalFilename();
// 創(chuàng)建客戶端對(duì)象
Client client = Client.create();
// 連接圖片服務(wù)器
WebResource resource = client.resource(realPath + fileName);
// 上傳文件
resource.put(upload.getBytes());
return "ok";
}
3.上傳測(cè)試結(jié)果

Server-image