基础准备:


Spring MVC为文件上传提供了直接支持,这种支持来自于MultipartResolver。Spring使用Jakarta Commons FileUpload技术实现了一个MultipartResolver:CommonsMultipartResolver。

Spring MVC上下文中默认没有装配MultipartResolver,因此我们需要配置它。

    <!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="52428800"></property>
<property name="uploadTempDir" value="temp"></property>
</bean>

上面设置了文件编码为"UTF-8",设置了最大上传大小为50M,设置了上传文件的临时目录为Web目录下的temp。

控制器:


有了MultipartResolver,就可以在Controller中使用文件上传功能了。Spring MVC将上传文件绑定到MultipartFile对象上。MultipartFile提供了获取上传文件内容、文件名等内容,通过其transferTo()方法可以将文件储存到硬盘中:

    /**
* @描述 文件上传演示操作
* @时间 2013-7-26 下午5:17:42
*/
@ResponseBody
@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
public String doFileUpload(@RequestParam String desc, @RequestParam MultipartFile file)
throws IllegalStateException, IOException {
if (!file.isEmpty()) {
String path = ProjectUtil.getMavenWebProjectPath() + "runtime";
ProjectUtil.createDir(path);
file.transferTo(new File(path + "/" + file.getOriginalFilename()));
} else {
return "fail";
}
return SUCCESS;
}

这里使用了工具类中(ProjectUtil)的两个方法:

    /**
* @描述 Maven项目中,获取项目路径
* @时间 2013-7-26 下午5:13:02
* @return 项目路径。如:D:\kuaipan\springmvc\
*/
public static String getMavenWebProjectPath() {
Resource resource = new ClassPathResource("./");
String filePath = "";
try {
filePath = resource.getFile().getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
filePath = filePath.substring(0, filePath.indexOf("target"));
return filePath;
}
    /**
* 创建目录
*/
public static void createDir(String filePath) {
File myFile = new File(filePath);
if (!myFile.exists()) {
myFile.mkdirs();
}
}

页面:


页面上,就是一个表单,然后一个文件字段和描述字段。需要注意的是<form>上要有enctype="multipart/form-data"属性定义。

最新文章

  1. redis的主从复制配置
  2. Sql导出数据报错--&gt;SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT&#39;OpenRowset/OpenDatasource&#39; 的访问
  3. 升级MySQL支持utf8mb4字符集详细步骤
  4. maven的update project是什么意思
  5. edx 配置smtp发送邮件
  6. MinGW中的头文件路径级环境变量设置
  7. 针对上一篇文章中的代码,想出的重构方案(python实现)
  8. 目标检测方法——R-FCN
  9. OnCheckedChangeListener和setChecked之间冲突问题解决
  10. redis非关系型数据库的基本语法
  11. javascript函数嵌套时arguments的问题
  12. Nginx负载均衡配置调优
  13. 用RotateDrawable实现网易云音乐唱片机效果
  14. 170606、防止sql注入(三)
  15. mysql 8.0 初识
  16. h5图片上传简易版(FileReader+FormData+ajax)
  17. new JSONObject()报错
  18. js变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级
  19. JMeter - 后处理器/脚本语言 - 比较
  20. 如何查看在Heroku上部署了那些站点

热门文章

  1. jquery.Deferred promise解决异步回调
  2. 微软职位内部推荐-SW Engineer II for Skype
  3. CAN开发中遇到的奇怪问题
  4. 拿什么拯救你,我的代码--c#编码规范实战篇 (转)
  5. navigator.sendBeancon方法简介
  6. 使用jQuery加载html页面到指定的div
  7. Redis入门学习(一)——安装配置
  8. log4js
  9. C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
  10. 第十二章:window对象