[本文参考文章(https://blog.csdn.net/Peter_S/article/details/84951978)
https://blog.csdn.net/weixin_39640122/article/details/80244527
- 使用MultipartFile进行文件上传
MultipartFile的常用方法
//获取原始文件名
String OriginalFileName = multipartFile.getOriginalFilename();
//获取文件内容类型可以根据 类型和文件名 进行上传类型控制
String contentType = multipartFile.getContentType();
//获取文件大小可以对上传文件大小进行限制
Long fileSize = multipartFile.getSize();
//将上传的文件数据导入到我们的空文件中
multipartFile.transferTo(file);
简单的代码实例测试
package com.example.upload_test.controller;
import com.sun.org.apache.xpath.internal.operations.Or;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class UploadController {
@Value("${upload.path}")
private String uploadPath;
private String[] types = new String[]{"jpd","xls"};
@RequestMapping(value = "/upload")
public String uploadHtml(){
return "/upload";
}
@RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
@ResponseBody
public void uploadFile(MultipartFile multipartFile) throws IOException {
if(multipartFile.isEmpty()){
//如果上传文件为空直接结束上传
return;
}
//获取原始文件名
String OriginalFileName = multipartFile.getOriginalFilename();
//获取文件内容类型可以根据 类型和文件名 进行上传类型控制
String contentType = multipartFile.getContentType();
//比如下边的方法
if(!isFileType(multipartFile)){
//上传的文件类型不符合要求
return;
}
//根据上传路径生成要上传的空文件 我们也可以生成随机的文件名
File file = new File(new File(uploadPath).getAbsolutePath()+ "/" + OriginalFileName);
//获取文件大小可以对上传文件大小进行限制
Long fileSize = multipartFile.getSize();
//将上传的文件数据导入到我们的空文件中
multipartFile.transferTo(file);
}
public boolean isFileType(MultipartFile multipartFile){
//获取原始文件名
String originalFileName = multipartFile.getOriginalFilename();
if(null!=originalFileName||originalFileName.length()>0){
int index = originalFileName.indexOf(".");
String fileType = originalFileName.substring(index+1, originalFileName.length());
for(String type:types){
if(fileType.equals(type)){
return true;
}
}
}
return false;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/testuplod/uploadFile" method="post" enctype="multipart/form-data">
<input type="file" name="multipartFile" >
<input type="submit" value="提交">
</form>
</body>
</html>
- 使用spring 的CommonsMultipartResolver 实现多文件上传
pom文件添加依赖jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
实现测试代码
package com.example.upload_test.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
@Controller
public class SpringUploadTestController {
@Value("${upload.path}")
private String uploadPath;
private String[] types = new String[]{"jpd","xls"};
@RequestMapping(value = "/upload2")
public String uploadHtml(){
return "/upload";
}
@RequestMapping(value = "/uploadFile2",method = RequestMethod.POST)
@ResponseBody
/**
* 多文件上传
*/
public void uploadFile(HttpServletRequest request) throws IOException {
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver= new CommonsMultipartResolver(
request.getSession().getServletContext());
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
Iterator<String> iterator = multiRequest.getFileNames();
while(iterator.hasNext()){
String fileName = iterator.next();
//获取文件
MultipartFile multipartFile=multiRequest.getFile(fileName);
//上传文件
uploadFile(multipartFile);
}
}
}
public void uploadFile(MultipartFile multipartFile) throws IOException {
if(null==multipartFile || multipartFile.isEmpty()){
//如果上传文件为空直接结束上传
return;
}
//获取原始文件名
String OriginalFileName = multipartFile.getOriginalFilename();
//获取文件内容类型可以根据 类型和文件名 进行上传类型控制
String contentType = multipartFile.getContentType();
//比如下边的方法
if(!isFileType(multipartFile)){
//上传的文件类型不符合要求
return;
}
//根据上传路径生成要上传的空文件 我们也可以生成随机的文件名
File file = new File(new File(uploadPath).getAbsolutePath()+ "/" + OriginalFileName);
//获取文件大小可以对上传文件大小进行限制
Long fileSize = multipartFile.getSize();
//将上传的文件数据导入到我们的空文件中
multipartFile.transferTo(file);
}
public boolean isFileType(MultipartFile multipartFile){
//获取原始文件名
String originalFileName = multipartFile.getOriginalFilename();
if(null!=originalFileName||originalFileName.length()>0){
int index = originalFileName.indexOf(".");
String fileType = originalFileName.substring(index+1, originalFileName.length());
for(String type:types){
if(fileType.equals(type)){
return true;
}
}
}
return false;
}
}
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/testuplod/uploadFile2" method="post" enctype="multipart/form-data">
<input type="file" name="multipartFile" >
<input type="file" name="multipartFile2" >
<input type="submit" value="提交">
</form>
</body>
</html>