现在的文件上传组件很多 很多初学者包括自己都会翻的眼花缭乱 试来试去 刚接触的很容易晕掉
今天看了一位作者的博文 struts2和springmvc上传文件的区别 struts2接触不多 先不管 先将能弄明白的springmvc上传方式贴出来
springmvc上传图片
实现原理: springmvc 支持web应用程序的文件上传功能 是由spring内置的MultipartResolver来实现的 -------你要知道他是基于什么实现功能的
实现过程: 上传文件的时候就需要在Spring的ApplicationContext里面加上SpringMVC提供的MultipartResolver的声明 这样之后 客户端每次进行请求的时候 springmvc都会检查request里面是否包含多媒体信息 如果包含了就会使用MultipartResolver进行解析,springmvc会使用一个支持文件处理的MultipartHttpServletRequest来包裹当前的HttpServletRequest 然后使用MultipartHttpServletRequest就可以对文件进行处理了 ---------需要静静思考的东西
其他需求: springmvc已经为我们提供了一个MultipartResolver的实现 我们只需要拿来用就可以了 那就是org.springframework.web.multipart.commons.CommsMultipartResolver 因为springMVC的MultipartResolver底层使用的是Commons-fileupload 所以还需要加入对Commons-fileupload.jar的支持 ---------别忘了这个架包 Commons-fileupload.jar架包导入之后 在SpringMVC的applicationContent配置文件中加入以下设置:
<!-- 上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<!-- 以字节为单位的最大上传文件的大小 -->
<property name="maxUploadSize" value="100000" />
</bean>
以下是配置文件各属性的解释:
defaultEncoding:表示用来解析request请求的默认编码格式 当没有指定的时候 根据Servlet规范会使用默认值ISO-8859-1(需要改变utf-8的注意以下这里) 当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding
uploadTempDir:设置上传文件时的临时目录 默认是Servlet容器的临时目录
maxUploadSize:设置允许上传的最大文件大小 以字节为单位计算 当设为-1时表示无限制 默认是-1
maxInMemorySize:设置在文件上传时允许写到内存中的最大值 以字节为单位计算 默认是10240
springmvc配置完成 现在还需要上传界面
demo的界面非常简单 就是一个普通的form表单 不同需要的同学请根据自己的需求 让表单各种变形就行
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Submit" />
<form action="upload.action" method="post" enctype="multipart/form-data">
</form>
这里唯一的重中之重就是from 中enctype属性的含义:
表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:
下面是controller层的处理方法:
@RequestMapping( value="/upload.do",method = { RequestMethod.POST })
public ModelAndView upload(@RequestParam(value = "file", required = false) MultipartFile file,HttpServletRequest request) {
System.out.println("成功进入控制层");//这里输出的文字 是为了可以在后台看到是否进入了这个方法 方便查错
String path = "E:/";//上传的目录 简单点 这里是E盘根目录 根据自己的需求改 想把上传的文件放在哪里 路径就写到哪里
String fileName = file.getOriginalFilename();//获取上传的文件名字 日后可以根据文件名做相应的需改 例如自定义文件名 分析文件后缀名等等
System.out.println(path);//后台输出你要存放文件的路径名 方便查错
File targetFile = new File(path, fileName); /新建文件
if (!targetFile.exists()) { //判断文件的路径是否存在
targetFile.mkdirs(); //如果文件不存在 在目录中创建文件夹 这里要注意mkdir()和mkdirs()的区别
}
// 保存
try {
file.transferTo(targetFile); //传送 失败就抛异常
} catch (Exception e) {
e.printStackTrace();
}
return new ModelAndView("result"); //看情况返回参数就OK了
}
以上就是springmvc上传文件到服务器的最简单功能的实现 环境配好 代码复制就能跑通
本文代码为转载 尊重作者 我只是编排了下逻辑顺序和排版 源码上少注释的地方也加上了 只为看的更清晰 更明白 欢迎多多指点 共同学习