Spring MVC上传文件还是很方便的,但是一开始完全不知道怎么用,所以就找前后台都有的教程。可是偏偏教程里的前后台根本不对应,就很尴尬。。。
这里记录下我遇到的问题及注意事项。
首先要在XML文件里配置好文件上传解析器。这里我没有配置,好像是公司框架里以及包含了。
XML配置
<!-- 文件上传配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 请求编码格式 -->
<property name="defaultEncoding" value="utf-8"></property>
<!-- 上传文件大小(单位:字节) -->
<property name="maxUploadSize" value="50000000"></property>
<!-- 缓冲区大小(单位:KB) -->
<property name="maxInMemorySize" value="10240"></property>
</bean>
前台代码
这里没用submit按钮提交,而是用JS方法。
HTML:
<form id="uploadForm" method="post" enctype="multipart/form-data">
<input type="file" name="file">
</form>
JS:
function uploadFile{
var url = "/importsPowerData";//后台处理文件的Controller
$("#uploadForm").attr("action", url);
$("#uploadForm").submit();
}
后台代码
要注意的是,@RequestParam(value = "file") 要和 HTML里的name="file"保持一致。
请求方式要看准,这里我用的POST请求,前后端要保持一致。
@RequestMapping(value = "/importsPowerData", method = RequestMethod.POST)
@ResponseBody
public void importsPowerData(@RequestParam(value = "file") MultipartFile file) throws Exception {
String sourceName = file.getOriginalFilename(); // 原始文件名
String fileType = sourceName.substring(sourceName.lastIndexOf("."));
if (file.isEmpty() || fileType == null || "".equals(fileType)) {
}
if (!".txt".equals(fileType.toLowerCase()) && !".csv".equals(fileType.toLowerCase())) {
}
// 存放文件临时路径
String base = request.getSession().getServletContext().getRealPath("/upload//");
//获取文件上传的路径,在webapp下的upload中
File fileDir = new File(base);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
// 讲文件上传到临时目录
String path = base + File.separator + sourceName;
File upload = new File(path);
try {
file.transferTo(upload);
} catch (IOException e) {
}
// 解析文件
BufferedReader br = null;
FileReader reader = null;
try {
reader = new FileReader(upload);
br = new BufferedReader(reader);
String line = "";
while ((line = br.readLine()) != null) {
if (line.trim().length() == 11) {
}
}
} catch (Exception e) {
log.error("上传文件失败", e);
} finally {
try {
if (reader != null) {
reader.close();
reader = null;
}
if (br != null) {
br.close();
br = null;
}
} catch (Exception e) {
}
// 删除临时文件
if (upload.isFile()) {
upload.delete();
}
}
}
这样就将文件上传到了项目根目录下的upload文件夹下了。