springmvc文件上传到服务器的实现

现在的文件上传组件很多  很多初学者包括自己都会翻的眼花缭乱  试来试去  刚接触的很容易晕掉

今天看了一位作者的博文  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个值:

application/x-www-form-urlencoded:这是默认编码方式  它只处理表单域里的value属性值  采用这种编码方式的表单会将表单域的值处理成URL编码方式
multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据  这种编码方式会把文件域指定文件的内容也封装到请求参数里
text/plain:这种方式主要适用于直接通过表单发送邮件的方式
文件上传是原理是通过为表单元素设置enctype=”multipart/form-data”属性  让表单提交的数据以二进制编码的方式提交  在接收此请求的Servlet中用二进制流来获取内容  就可以取得上传文件的内容  从而实现文件的上传

下面是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上传文件到服务器的最简单功能的实现  环境配好  代码复制就能跑通 
本文代码为转载  尊重作者  我只是编排了下逻辑顺序和排版  源码上少注释的地方也加上了   只为看的更清晰 更明白  欢迎多多指点  共同学习

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值