SpringBoot有它自己的接收请求的代码。下面就给大家详细介绍一下它是如何实现单个文件和多个文件上传的功能的。
首选做一个简单的案例,也就是单个文件上传的案例。(这个案例是基于SpringBoot上面的,所以大家首先得搭建好SpringBoot这个框架)
前台HTML代码:
[html] view plain copy
<html>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
/**
* 文件上传具体实现方法
*
* @param file
* @return
*/
@RequestMapping("/upload")
@ResponseBody
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
/*
* 这段代码执行完毕之后,图片上传到了工程的跟路径; 大家自己扩散下思维,如果我们想把图片上传到
* d:/files大家是否能实现呢? 等等
* 这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如: 1、文件路径; 2、文件名;
* 3、文件格式 4、文件大小的限制
*/
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(
file.getOriginalFilename())))
System.out.println(file.getName())
out.write(file.getBytes())
out.flush()
out.close()
} catch (FileNotFoundException e) {
e.printStackTrace()
return "上传失败," + e.getMessage()
} catch (IOException e) {
e.printStackTrace()
return "上传失败," + e.getMessage()
}
return "上传成功"
} else {
return "上传失败,因为文件是空的."
}
}
这样就可以实现对multipart/form-data类型文件的接收了。那如果是多个文件外加多个字段呢,下面接着看下一个多个文件上传的案例。
前台HTML界面:
[html] view plain copy
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="/batch/upload">
<p>文件1:<input type="text" name="id" /></p>
<p>文件2:<input type="text" name="name" /></p>
<p>文件3:<input type="file" name="file" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
@RequestMapping(value = "/batch/upload", method = RequestMethod.POST)
@ResponseBody
public String handleFileUpload(HttpServletRequest request) {
MultipartHttpServletRequest params=((MultipartHttpServletRequest) request)
List<MultipartFile> files = ((MultipartHttpServletRequest) request)
.getFiles("file")
String name=params.getParameter("name")
System.out.println("name:"+name)
String id=params.getParameter("id")
System.out.println("id:"+id)
MultipartFile file = null
BufferedOutputStream stream = null
for (int i = 0 i < files.size() ++i) {
file = files.get(i)
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes()
stream = new BufferedOutputStream(new FileOutputStream(
new File(file.getOriginalFilename())))
stream.write(bytes)
stream.close()
} catch (Exception e) {
stream = null
return "You failed to upload " + i + " => "
+ e.getMessage()
}
} else {
return "You failed to upload " + i
+ " because the file was empty."
}
}
return "upload successful"
}
这样就可以实现对多个文件的接收了功能了。
首先要配置好bean:然后页面的form表单必须要有 enctype="multipart/form-data" 属性:
然后方法中要有 MultipartFile 参数,如果时接收多个图片的话可以写成数组就好 MultipartFile[ ] ,还有问题的话得在这个参数前加上@RequestParam注解,注解的value属性就是这儿参数的参数名.
还有一种不通过这个参数接收上传的文件,直接从request中获取,需要参数 HttpServletRequest 参数.
然后将这个request转成 MultipartHttpServletRequest ,然后 getFiles("name值") 获取到指定name值的文件,这里返回的是一个list集合,就是说可以获取多个相同name属性值的文件.
还有其他的api获取文件,getFile() 获取指定名称的单个文件,前提是name属性值唯一 *** 作和使用 MultipartFile 参数一样,因为这个方法返回的就是这个对象,
还有 getFileMap() 方法返回一个 MultipartFile 类型的map集合,map集合的key是唯一不重复的,所以前端传过来的name值不能相同,不然没法用这个.然后根据key找value,value就是一个 MultipartFile 对象.
最后一个就是 getMultiFileMap() 这个其实跟 getFileMap() 用法是一样的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)