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