MultipartFile是在web中对文件上传的一个组件,关于怎么使用,在这里做一个简单的demo
—— @Yelihu 2018年9月20日 00:36:21
1.在maven中,首先导入apache commons uploadfile的包。在respository中搜索uploadfile即可,选择1.31或者1.33版本的随意,复制粘贴在pom.xml,若不是maven项目,则需要下载添加相应的jar包
2.注册文件上传解析器,在spring的配置文件里面(属性的作用如注解标识)
104857600
4096
utf-8
ps.属性补充:
3.前端代码文件提交部分:*注意:由于上传所遵循的传输协议要求特殊,所以要在前端提交表单的时候添加一个属性 enctype即encoding type 文件上传的内容在正文,必须使用POST请求而不是GET
4.controller部分代码,获取文件和文件名称,对文件名称进行处理(添加时间戳防止重名)之后,保存在本机的E盘下,结束并跳转到成功页面 upload_success.jsp并打印成功信息
/**
* 上传文件
* */
@RequestMapping(value="/uploadtest")
public String uploadtest(@RequestParam("file")MultipartFile multipartFile, Model model){//入参代表上传的文件
//0,判断是否为空
if(multipartFile!=null && !multipartFile.isEmpty())
{
/**
* 对文件名进行操作防止文件重名
*/
//1,获取原始文件名
String originalFilename = multipartFile.getOriginalFilename();
//2,截取源文件的文件名前缀,不带后缀
String fileNamePrefix = originalFilename.substring(0,originalFilename.lastIndexOf("."));
//3,加工处理文件名,原文件加上时间戳
String newFileNamePrefix = fileNamePrefix + System.currentTimeMillis();
//4,得到新文件名
String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));
//5,构建文件对象
File file = new File(upLoadPath + newFileName);
//6,执行上传操作
try {
multipartFile.transferTo(file);
//上传成功,向jsp页面发送成功信息
model.addAttribute("fileName","文件上传成功! 文件名:"+newFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
return "system/plansubmit/upload_success";
}
如上,已经完成了对单个文件上传的操作,控制台已经能打印出文件的名称(处理后)并保存文件到指定的E盘根目录下
对于多个文件,只需要修改前端代码(多个文件input)+controller 即可。
JSP页面:
即多个name为file的input,不需要给多个name命名,后台使用Multipart[] 这个数组接收即可
Controller代码如下:
@RequestMapping(value="/uploadtest2")
public String uploadtest2(@RequestParam("file")MultipartFile[] multipartFiles,Model model){//入参代表上传的文件
//设置list存放数组
List fileNames = new ArrayList<>();
//0,判断是否为空
if(multipartFiles!=null && multipartFiles.length>0)
{
for (MultipartFile multipartFile:multipartFiles)
{
if(multipartFile!=null && !multipartFile.isEmpty())
{
/**
* 对文件名进行操作防止文件重名
*/
//1,获取原始文件名
String originalFilename = multipartFile.getOriginalFilename();
//2,截取源文件的文件名前缀,不带后缀
String fileNamePrefix = originalFilename.substring(0,originalFilename.lastIndexOf("."));
//3,加工处理文件名,原文件加上时间戳
String newFileNamePrefix = fileNamePrefix + System.currentTimeMillis();
//4,得到新文件名
String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));
//5,构建文件对象
File file = new File(upLoadPath + newFileName);
//6,执行上传操作
try {
multipartFile.transferTo(file);
//上传成功,把 文件名 存入list里面
fileNames.add(newFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//list传送到前端
model.addAttribute("fileNames",fileNames);
return "system/plansubmit/upload2_success";
}
设置List存放多个文件的名字,循环内部对每个文件进行文件名处理并输出
如上,已经完成了对多个文件上传的操作,文件已经保存到到指定的E盘根目录下。