ssm框架中基于springMVC进行的文件上传.
来源:互联网 发布:一个人失忆薛凯琪 知乎 编辑:程序博客网 时间:2024/04/26 05:25
在做ssm的文件上传的时候, 前面起码是已经整合好了, 最少新建一个项目, 写一个Controller,项目可以跑起来, 也能被访问成功. 如果还没有整合成功.
请看这里: http://blog.csdn.net/liu72849/article/details/78003992
可能需要用到的几个依赖,基于maven的添加到pom.xml文件:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>
配置完成之后, 我们还要针对文件上传在配置文件中添加新的标签.
在spring-mvc.xml(基于上面网站中的配置文件)中添加:
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=utf-8</value> </list> </property> </bean> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter"/><!-- json转换器 --> </list> </property> </bean> <!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 100M --> <property name="maxUploadSize" value="104857600"></property> <property name="defaultEncoding" value="utf-8"></property> </bean>
package com.ssm.utils;//jdk中的UUID类.import java.util.UUID;//定义一个解决上传时候, 产生因用户上传文件名称相同导致上传过来的文件被覆盖这个问题.public class StringUuid {@SuppressWarnings("unused")//获取一个唯一值.public static String getUuidFilename(String filename) {// 首先, 将传进来的文件名, 进行截取, 只保留 .xxx的后缀名.// 在这个文件名, 截取 " . "和它后面的字符串String substring = filename.substring(filename.lastIndexOf("."));// 接着使用 jdk的API中带有的 UUID.randomUUID().toString()方法产生一个随机且不重复的字符串.String replace = UUID.randomUUID().toString().replace("-", "");// 将这个随机产生的字符串 作为文件的前缀名, 再加上后缀名称就可以避免用户上传同名文件产生 文件被覆盖这个问题.String filenames = replace + substring;return filenames;}//通过文件名称创建二级目录.public static String getRealPath(String uUidfilename){//首先, 将唯一的文件名变成一个 hash值.int hashCode1 = uUidfilename.hashCode();//然后 将这个hash值和 0xf(也就是二进制的 1111)做 位与运算.int hashCode2 = hashCode1 & 0xf;//将做完位与运算的结果右移4位.int hashCode3 = hashCode2>>>4;//将右移完了的结果 再次和 1111这个二进制数进行 位与运算.int hashCode4 = hashCode3 & 0xf;//之后, 将 第一次的位与运算得到的数字作为 一级目录, 将 第二次的位与运算得到的数字作为二级目录.return "/"+hashCode2+"/"+hashCode4;}}
接着在Controller(handler)中,写一个接收上传文件的方法.
package com.ssm.controller;import java.io.File;import java.io.IOException;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import com.ssm.dto.Uploadfile;import com.ssm.service.UploadService;import com.ssm.utils.StringUuid;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;@Controller@RequestMapping("/TUser")public class UserController {// 注入文件上传的业务层. @Resource private UploadService uploadService; @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) @ResponseBody public String upload(MultipartFile file, HttpServletRequest request,Model model) throws IOException {// 获取我们准备好的用于存储上传文件的绝对路径. String paths = request.getSession().getServletContext().getRealPath("upload");// 获取上传过来的原始文件名. String fileName = file.getOriginalFilename(); System.out.println(fileName);// IE浏览器在上传的时候会将盘符路径也传递过来.截取文件名.// lastIndexOf()方法, 指定从 该字符串中的 最后一个 "\"号后开始截取. String lastfile = fileName.substring(fileName.lastIndexOf("\\") + 1);// 将截取后的文件名使用UUID,生成一个唯一的文件名称, String filenameuuid = StringUuid.getUuidFilename(lastfile);// 将唯一的文件名, 传入这个方法,得到目录分离// 这是根据传递过来的文件名称在upload这个主存储文件夹下生成其他字文件夹. String realPath = StringUuid.getRealPath(filenameuuid);// 将主存储目录名称和子文件夹名称连接在一起. String path = paths + realPath;// 生成文件夹以及生成准备接收内容的文件. File dir = new File(path,filenameuuid); System.out.println(dir);// 如果该文件夹不存在则创建. if (!dir.exists()) { dir.mkdirs(); }// MultipartFile自带的解析方法.底层将上传的文件以流对流的方式接收内容. file.transferTo(dir);// 获取这个文件存储的虚拟全路径. String contextPath = request.getContextPath();//获取项目名称.// 获取域名+项目名称 String basePath = request.getScheme()+"://"+request.getServerName()+":"+ request.getServerPort()+contextPath+"/"; System.out.println(basePath);// 获取上传文件的虚拟路径全名称. String relatedAddress = basePath+"upload"+realPath+"/"+filenameuuid;// 将这个虚拟路径存储到数据库中(对应的实体类中)。 Uploadfile uploadfile = new Uploadfile(); uploadfile.setPath(relatedAddress);// 将对象存入数据库中。这一步实际上就是向数据库表中存一个实现定义好了的pojo类.// 能做到文件上传这里的话, 自己写一个保存pojo实体类内容到对应表中应该不会有问题.略过步骤 uploadService.insertUploadfile(uploadfile);// 将虚拟路径存储到request域中。 这里使用springMVC的model进行存储并返回。 System.out.println(relatedAddress);// 这一步就是练着玩的.实际底层就是向一个request域对象存值.// model.addAttribute("name", Object);// 这里的返回值根据实际要求返回, 可以返回要跳转的页面, 也可以返回一串字符串到要html页面, 在页面根据这个接收到的返回值进行其他步骤. return "ok!"; }}
具体的业务层和DAO层自己写就好.
html就不写了.网上一大堆的资源.
阅读全文
0 0
- ssm框架中基于springMVC进行的文件上传.
- 基于SSM框架的多文件上传Controller类编写
- SSM之SpringMVC的文件上传
- 18、SSM框架-SpringMVC 实例文件上传(5)
- ssm框架下的SpringMVC上传文件的三种方式
- 基于SpringMVC的文件上传
- 基于SpringMVC的上传文件
- springMVC框架的文件上传
- JQueryAjax使用SpringMVC中MultipartFile进行文件上传的整合
- JQueryAjax使用SpringMVC中MultipartFile进行文件上传的整合
- 基于Maven的SSM框架的搭建(Spring+SpringMVC+MyBatis)
- SpringMVC中使用CommonsMultipartResolver进行文件上传
- SpringMVC中使用StandardServletMultipartResolver进行文件上传
- 基于Maven的SSM框架整合(Spring+SpringMVC+MyBatis)
- Java SSM框架文件上传
- 通过SpringMVC进行文件的上传
- 通过SpringMVC进行文件的上传
- 【SpringMVC】SpringMVC中使用StandardServletMultipartResolver进行文件上传
- FPGA与数字信号处理
- 20 多个国外优秀Android开源 App ,值得收藏和学习
- 大家好
- 值得学习的C/C++语言开源项目
- Shiro+Spring+Struts2集成演示权限控制
- ssm框架中基于springMVC进行的文件上传.
- 打工了这么多年 有意无意在沉思,以后要做一个什么样的产品?
- 乘法器Verilog
- URL、URI和URN三者之间的区别
- Linux进程间通信方式
- 没有拿得出手的项目, 如何在面试/简历中为自己加分?
- Maven使用详解,非常详细
- c++面试问题
- Android WebView上传图片(base64)到H5(JS)