客户端文件上传要求:
1,表单提交方式为post提交
2,提供文件上传组件,
3,表单的entype属于必须属于multipart/form-data,如果没有这个属性值的话,文件内容是提交不到服务器的。
服务器端要求:
1,获取到客户端上传的文件
2,准备一个目录存储客户端上传的文件
3,将上传的文件写入到目录中
SpringMVC封装了commons-fileupload,所以我们还需要添加commons-fileupload的依赖
- <dependency>
- <groupId>commons-fileuploadgroupId>
- <artifactId>commons-fileuploadartifactId>
- <version>1.4version>
- dependency>
在Spring.xml文件中配置文件解析器
-
-
- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
-
- <property name="maxUploadSize" value="5242880">property>
- bean>
简单案例
客户端
- <html>
- <head>
- <title>Titletitle>
- head>
- <body>
- <form action="/file/upload" method="post" enctype="multipart/form-data">
- <input type="file" name="logo">
- <input type="submit" value="提交上传">
- form>
- body>
- html>
- @RestController
- @RequestMapping("file")
- public class FlieUploadController {
- /**
- * 1,获取客户端上传的文件的信息
- * 2,获取客户端上传的文件,存放到文件夹中,通过输出流存储到文件夹中
- *
- * 注意:!!!参数中MultipartFile的名字必须与客户端一致
- */
- @PostMapping("upload")
- public void upload( MultipartFile logo, HttpServletRequest httpServletRequest){
-
- //1,获取项目在编译后,存储文件夹的真实路径
- //优化目录
- Calendar instance = Calendar.getInstance();
- //日期做目录
- String dirDate = instance.get(Calendar.YEAR)+"/"+instance.get(Calendar.MONTH)+"/"+instance.get(Calendar.DATE);
- String realPath = httpServletRequest.getSession().getServletContext().getRealPath("file/"+dirDate);
- File file = new File(realPath);
- //判断file文件夹是否真实存在
- if(!file.exists()){
- //不存在
- //创建文件夹
- file.mkdirs();
- }
- //获取客户端上传的文件名
- String originalFilename = logo.getOriginalFilename();
- //获取后缀
- int i = originalFilename.lastIndexOf(".");
- String suffix = originalFilename.substring(i);
- //文件名用uuid代替文件名
- String filename = UUID.randomUUID()+suffix;
- try {
- //将客户端的文件写入到文件夹中
- logo.transferTo(new File(file,filename));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
FastDFS+Nginx搭建Java分布式文件系统-爱码网
简单的远程上传文件的案例
用tomcat做文件服务器,首先需要配置web.xml
tomcat默认不是允许其他服务器往自身写入数据的,需要在tomcat配置文件conf/web.xml的servlet标签下加上如下代码
- <init-param>
- <param-name>readonlyparam-name>
- <param-value>falseparam-value>
- init-param>

然后上传文件的服务端添加以下依赖
- <dependency>
- <groupId>com.sun.jerseygroupId>
- <artifactId>jersey-coreartifactId>
- <version>1.18.1version>
- dependency>
- <dependency>
- <groupId>com.sun.jerseygroupId>
- <artifactId>jersey-clientartifactId>
- <version>1.18.1version>
- dependency>
然后案例代码如下:
- @PostMapping("upload2")
- public void upload2(MultipartFile logo){
- //获取客户端上传的文件名
- String originalFilename = logo.getOriginalFilename();
- //获取后缀
- int i = originalFilename.lastIndexOf(".");
- String suffix = originalFilename.substring(i);
- //文件名用uuid代替文件名
- String filename = UUID.randomUUID()+suffix;
-
- //使用跨服务文件上传方式,将客户端文件上传到文件服务器中
- Client client = Client.create();
- //连接文件服务器路径
- WebResource resource = client.resource("http://localhost:8080/file/"+filename);
- try {
- resource.put(logo.getBytes());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }