SpringMVC上传下载

Posted 池鱼i_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC上传下载相关的知识,希望对你有一定的参考价值。

  Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现,取消了不同上传组件上的编程差异。

由于Spring MVC框架是无法单独自己完成的,所以需要引入专门的文件上传jar包。文件上传是基于commons-fileupload组件的文件上传。因此,需要将commons-fileupload组件相关的jar(commons-fileupload-1.3.1.jar和commons-io-2.4.jar)拷贝到Spring MVC应用的WEB-INF/lib目录下。下面讲解一下如何下载相关jar包。     commons-fileupload组件可以从http://commons.apache.org/proper/commons-fileupload/上下载,本书采用的版本是1.3.1。下载它的Binaries压缩包(commons-fileupload-1.3.1-bin.zip),解压后的目录中有两个子目录,分别是lib和site。lib目录下有个JAR文件:commons-fileupload-1.3.1.jar,该文件是commons-fileupload组件的类库。site目录中是commons-fileupload组件的文档,也包括API文档。     commons-fileupload组件依赖于Apache的另外一个项目:commons-io,该组件可以从http://commons.apache.org/proper/commons-io/上下载,本书采用的版本是2.4。下载它的Binaries压缩包(commons-io-2.4-bin.zip),解压缩后的目录中有四个JAR文件,其中有一个commons-io-2.4.jar文件,该文件是commons-io的类库。

   基于表单的文件上传,不要忘记使用enctype属性,并将它的值设置为multipart/form-data。同时,表单的提交方式设置为post。为什么需要这样呢?下面从enctype属性说起。     表单的enctype属性指定的是表单数据的编码方式,该属性有如下三个值:     application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的value属性值。     multipart/form-data:该编码方式以二进制流的方式来处理表单数据,并将文件域指定文件的内容封装到请求参数里。     text/plain:该编码方式当表单的action属性为mailto:URL的形式时才使用,主要适用于直接通过表单发送邮件的方式。     由上面三个属性的解释可知,基于表单上传文件时,enctype的属性值应为multipart/form-data。

 在Spring MVC框架中,上传文件时,将文件相关信息及操作封装到MultipartFile对象中。因此,开发者只需要使用MultipartFile类型声明模型类的一个属性,即可以对被上传文件进行操作。该接口具有如下方法:     byte[] getBytes():以字节数组的形式返回文件的内容。     String getContentType():返回文件的内容类型。     InputStream getInputStream():返回一个InputStream,从中读取文件的内容。     String getName():返回请求参数的名称。     String getOriginalFilename():返回客户端提交的原始文件名称。     long getSize():返回文件的大小,单位为字节。     boolean isEmpty():判断被上传文件是否为空。     void transferTo(File destination):将上传文件保存到目标目录下。     上传文件时,需要在配置文件中使用Spring的org.springframework.web.multipart.commons.CommonsMultipartResolver类配置MultipartResolver 用于文件上传。

  创建项目,将Spring MVC相关JAR包、commons-fileupload组件相关JAR包以及JSTL相关JAR包导入应用的lib中。

在WebContent目录下,创建JSP页面oneFile.jsp。

<form action="${pageContext.request.contextPath }/onefile" method="post" enctype="multipart/form-data">       选择文件:<input type="file" name="myfile">  <br>     文件描述:<input type="text" name="description"> <br>  <input type="submit" value="提交">   </form>

在src目录下,创建包pojo,在该包中创建POJO类FileDomain。在该POJO类中声明一个MultipartFile类型的属性,封装被上传的文件信息,属性名与文件选择页面oneFile.jsp中的file类型的表单参数名myfile相同。具体代码如下:

package pojo;

import org.springframework.web.multipart.MultipartFile;

public class FileDomain {     private String description;     private MultipartFile myfile;     //省略setter和getter方法 }

在src目录下,创建controller包,并在该包中创建FileUploadController控制器类。

@RequestMapping("/onefile")    

 public String oneFileUpload(@ModelAttribute FileDomain fileDomain, HttpServletRequest request){   

 String realpath = request.getServletContext().getRealPath("uploadfiles");       

 String fileName = fileDomain.getMyfile().getOriginalFilename();     

    File targetFile = new File(realpath, fileName);   

     if(!targetFile.exists()){        

      targetFile.mkdirs();        

  }         //上传    

    try {               fileDomain.getMyfile().transferTo(targetFile);          

   logger.info("成功");         }

catch (Exception e) {               e.printStackTrace();           }         return "showOne";     }

创建Spring MVC的配置文件

上传文件时,需要在配置文件中使用spring的CommonsMultipartResolver类 配置MultipartResolver 用于文件上传。

 

<!--使用Spring的CommosMultipartResolver,配置MultipartResolver 用于文件上传 -->       <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"           p:defaultEncoding="UTF-8"           p:maxUploadSize="5400000"           p:uploadTempDir="fileUpload/temp"      >       <!--D:\\spring mvc workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\fileUpload  -->       </bean>     <!-- defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1 maxUploadSize="5400000" 是允许上传文件的最大值,单位为字节 uploadTempDir="fileUpload/temp" 为上传文件的临时路径 -->

 

创建成功显示页面

<body>     ${fileDomain.description }<br>     <!-- fileDomain.getMyfile().getOriginalFilename() -->     ${fileDomain.myfile.originalFilename } </body>

 

 

 

 

 

 

 

 

 

 

 

以上是关于SpringMVC上传下载的主要内容,如果未能解决你的问题,请参考以下文章

springmvc怎么将上传本地文件到文件服务器

SpringMVC:SpringMVC文件下载

SpringMVC文件上传下载

SpringMVC上传下载

springmvc 多文件上传 MultipartFile 怎么获取前台传过来的参数

springmvc--文件上传下载