首先SpringMVC的六步配置要走好,这个自己去配置好,然后先是建立一个Controller文件,这个是File.Controller文件
File.Controller文件代码如下:
@Controller
@RequestMapping("/file")
public class FileController {
@PostMapping("/upload") //上传文件必须加这个注解
public String upload(String username, @RequestParam CommonsMultipartFile file, HttpSession session){
System.out.println("用户名:"+username);
System.out.println(file);
System.out.println("表单名:"+file.getName());
System.out.println("文件名:"+file.getOriginalFilename());
System.out.println("文件大小:"+file.getSize());
String path=session.getServletContext().getRealPath("/WEB-INF/upload/");
System.out.println(path);
try {
file.transferTo(new File(path, StringUtils.renamefileName(file.getOriginalFilename())));
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
}
下面就来详细解释一下,首先RequestMapping和PostMapping这些都是针对相对应的JSP页面的,相对应的JSP页面中有这样一行代码:
<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
这里面的file/upload就是FileController的连接地址,把这个Controller文件和这个JSP文件进行连接起来。除此之外还需要注意的是后面部分enctype="multipart/form-data"
这个代表的是二进制,这个是一定要加的,决定了上传文件以哪种形式进行上传。
继续回到FileController文件里面看看public String upload(String username, @RequestParam CommonsMultipartFile file, HttpSession session)
这里要注意的是必须要有@RequestParam的注解才能上传文件,如果少了这个注解是没办法上传的,会报错。还有可以看到这里面包含了username,file,session等等参数,username就是用户名,因为做了一个需要输入用户名的前端接收输入框,需要接收用户名的信息。给你们展示一段JSP的username部分的代码吧:
用户名:<input type="text" name="username"><br>
JSP页面这里有个name值,就是接收了这个username,然后username再经过JSP传向后端Controller这里,并且再后台打印出来。
CommonsMultipartFile是一个系统里面的一个方法类,使用了它后可以顺带使用它的一些功能比如上面的
`
System.out.println("表单名:"+file.getName());
System.out.println("文件名:"+file.getOriginalFilename());
System.out.println("文件大小:"+file.getSize());`
getName也就是获取这个表单的名字也就是JSP的名字,getOriginalFilename这个是获取上传文件的名字,比如我上传一个图片名叫123.jpg,那这个getOriginalFilename获取到的名字就是123.jpg,到时候会打印再后台显示,getSize就是得到上传文件的大小,然后打印在后台。
String path=session.getServletContext().getRealPath("/WEB-INF/upload/");
这个代表的意思就是上传的文件应该放在哪里,路径为WEN-INF/upload这个地方。(upload为一个文件夹)
System.out.println(path);
上面的String了这个路径后,这里就把它打印出来,上传文件成功后,会在后台显示这个文件被放置的具体路径在哪里。
在这里就可以总结一下写这个Controller的三个重要的关键点就是username,file和session,主要围绕这三个去写这个Controller,username负责向后台传递用户写的名字是什么,file就是能够反馈文件的大小,文件名,还有使用的表单名,还有一个就是session的主要作用就是为了建设一个可以存放上传文件的路径,方便上传文件的存放。
重点讲一下这个session,刚刚只是将它String了一下路径,但是并没有真正执行这个传达给系统让他知道去使用这个路径去存储上传文件,所以就需要执行以下,所以就有了下一步:
file.transferTo(new File(path, StringUtils.renamefileName(file.getOriginalFilename())));
这就是文件转移,也是利用到了file这个参数进行文件转移,第一个path就是刚刚String过的上传文件的路径,把它传进去就好,第二个String Utils.renamefileName这个的意思就是取名字的意思,文件被上传至指定路径,需要给这个文件一个名字呀,所以就有括号后面的file.getOriginalFilename,就是获取文件的原始名字,让上传到指定路径的文件的名字和原来的文件名字一样。还要注意记得加上try catch方法,这样才不会报错。最终return “success” 返回success这个JSP页面
以上便是FileController文件的配置详解,接下来就到它的映射文件Springmvc.xml的详解:
首先我们需要网页的地址需要加上:
<mvc:view-controller path="/showFile" view-name="file"/>
/showFile就是网页地址后面需要添加的具体路径,view-name就是连接到哪个JSP页面的意思,这里连接的JSP页面名字为file。
还有一个最关键的步骤,就是要加上这一行代码:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
这个是必须需要的代码,上传文件需要这个映射方法,并且id的名字是不可以更改的,一定要按照原来的这个id去写。
映射文件里面还有Springmvc的六步配置这里就不详细写了,不懂的同学去把基础补充好。
最后的就是JSP页面的代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
文件:<input type="file" name="file">
上传:<input type="submit" value="上传">
</form>
</body>
</html>
input type代表类型,需要你去确定它是输入框类型,还是文件类型,还是按钮类型
前端页面做出来后如图所示,input type="file"的就显示一个按钮名字为选择文件,input type="submit"的就会显示一个按钮,按钮名字为value的名字。
点击文件后进行上传后,反馈回控制台的信息如上,这些都是Controller的功能,所以才能让这些信息可以得到显示,而且文件有指定的文件夹可以存放