一、配置
使用Spring的文件上传功能,需要在文件上下文中配置MultipartResolver。
在配置文件中添加如下一段,我们可以在Bean定义中配置上传文件大小等属性。
<!-- 文件上传 -->
<!-- 定义文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
<!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
<property name="maxInMemorySize" value="40960"></property>
<!-- 上传文件的临时路径 -->
<property name="uploadTempDir" value="fileUpload/temp"></property>
<!-- 延迟文件解析 -->
<property name="resolveLazily" value="true"/>
</bean>
二、设计前端表单进行文件上传
<form action="http://localhost:8080/systemSettings/advance/fileUpload.do" id="domeform" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="选择文件"/><br>
<input type="text" name="advanceAdmin" value="advanceAdmin"/><br>
<input type="text" name="advancePersion" value="advancePersion"/><br>
<input type="text" name="kId" value="kId"/><br>
<input type="submit" value="表单提交"/>
</form>
三、后端对文件进行接收
@RestController
@RequestMapping("/systemSettings/advance")
@ResponseBody
public class AdvertisementController {
@Autowired
private AdvanceService advanceService;
/**
* 广告文件上传接口
* @deprecated 通过表单上传时,form标签需要加上 enctype="multipart/form-data" 属性
*
* 上传的文件需要设置 name="file"
*
* 示例:
* <form action="http://localhost:8080/systemSettings/advance/upload.do" id="domeform" method="post" enctype="multipart/form-data">
* <input type="file" name="file" value="选择文件"/>
* <input type="submit" value="表单提交"/>
* </form>
*
*
* @param file 由表单上传文件
* @return String 成功返回新的文件名,失败返回“失败”
*/
@RequestMapping(value = "/fileUpload.do")
public String uploadFile(@RequestParam("file") MultipartFile file,Advertisement advertis){
// 文件原名称
String fileName = file.getOriginalFilename();
// 原来的文件名
String suffix = fileName.substring(fileName.lastIndexOf('.'));
// 加上时间戳生成新的文件名
String newFileName = new Date().getTime() + "_" + fileName;
// 文件存储路径
String path = "D:\\demo\\cloud_demo\\src\\main\\resources\\upload\\advance\\";
File newFile = new File(path + newFileName);
// 将广告的其他信息放入pojo保存到数据库中
Advertisement advertisement = new Advertisement();
advertisement.setkId(advertis.getkId());
advertisement.setAdvancePersion(advertis.getAdvancePersion());
advertisement.setAdvanceAdmin(advertis.getAdvanceAdmin());
advertisement.setAdvanceTime(new Date(System.currentTimeMillis()));
// 数据库中存储的是新文件的名字
advertisement.setContent(newFileName);
advanceService.insert(advertisement);
try {
file.transferTo(newFile);
return newFileName;
}
catch (Exception e){
e.printStackTrace();
return "失败";
}
}
}
需要注意参数中定义的@RequestParam("file")
必须对应到前端表单中上传文件的name
属性的值。