springmvc实现单文件上传
后端代码:
方法一:自己实现文件上传,可优化
@RequestMapping("/fileupload")
//@RequestParam("file1") 用来和前端的name="file1"相关联
public String fileupload(@RequestParam("file1") CommonsMultipartFile file,HttpSession session) throws Exception {
System.out.println("======");
String fileName=file.getOriginalFilename();
System.out.println("=======fileupload============"+fileName);
//输入流关联源文件
InputStream in = file.getInputStream();
//输出流关联目标文件
OutputStream out = new FileOutputStream("C://aa//"+fileName);
byte b[]=new byte[1024];//一次传多大
int len=0;//当最后只剩下500b的时候,len=500;
while((len=in.read(b))!=-1) {
out.write(b,0,len);
out.flush();
}
//关闭资源
out.close();
in.close();
//文件上传
session.setAttribute("fileName", fileName);
return "index";
}
方法二:使用springmvc自带的上传 不可优化
@RequestMapping("/fileupload")
//@RequestParam("file1") 用来和前端的name="file1"相关联
public String fileupload(@RequestParam("file1") CommonsMultipartFile file,HttpSession session) throws Exception {
System.out.println("======");
String fileName=file.getOriginalFilename();
System.out.println("=======fileupload============"+fileName);
//文件上传
file.transferTo(new File("C://aa//"+file.getOriginalFilename()));
return "index";
}
前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- enctype属性指定的是表单数据的编码方式 -->
<form action="fileupload" method="post" enctype="multipart/form-data">
<input type="file" name="file1">
<button>提交</button>
</form>
</body>
</html>
springmvc实现多文件上传
后端代码:
@RequestMapping("/upload")
public String upload(HttpServletRequest request){
System.out.println("=====upload======");
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断form是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request转换成MultipartHttpServletRequest类型
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
Iterator<String> iter = multipartRequest.getFileNames();
//遍历文件
while (iter.hasNext()) {
//将文件放入file中,并将指针指向下一条
MultipartFile file = multipartRequest.getFile(iter.next());
System.out.println("=======判断后面还有没有文件============"+iter.hasNext());
if(!file.isEmpty()){
//文件名
String path = file.getOriginalFilename();
System.out.println("========文件名========"+path);
try {
//文件上传
file.transferTo(new File("c://aa//"+path));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return "index";//转发到index页面
}
前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多文件上传</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
选择文件1:<input type="file" name="file"><br>
选择文件2:<input type="file" name="file1"><br>
选择文件3:<input type="file" name="file2"><br>
选择文件4:<input type="file" name="file3"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
前端代码中需要注意的是name属性中的值不能相同,但是可以随意定义