最近,要测试文件上传API,文件上传的东西还挺多的。
要测试,首先得有后台吧,所以,简单搭了个springMVC,引入必要的jar包,然后写了个文件上传接口。
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public ResponseResult uploadFiles(HttpServletRequest request) {
ResponseResult result = new ResponseResult();
// 获取前台传递的userId参数
String userId = request.getParameter("userId");
// 多文件上传处理类
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 这里循环处理上传的文件
for (Iterator<String> it = multiRequest.getFileNames(); it.hasNext(); ) {
// 上传文件列表的key信息
String fileKey = it.next();
// 获取上传的文件信息
MultipartFile multipartFile = multiRequest.getFile(fileKey);
// 判断文件是否为空
String sourceFileName = multipartFile.getOriginalFilename();
if (sourceFileName == null || sourceFileName.length() == 0) {
// 获取到文件为空,这里不允许上传空文件
//result.setStatus(StatusType.FAILURE);
//result.setMsg(MsgType.ERROR_UPLOAD_FILE_IS_EMPTY.getMsg());
return result;
}
// 上传文件名称
String uploadFileName = sourceFileName.substring(0, sourceFileName.lastIndexOf("."));
// 上传文件类型
String uploadFileType = sourceFileName.substring(sourceFileName.lastIndexOf("."));
// 上传文件时间
long uploadTime = System.currentTimeMillis();
// 保存的文件名称(这里设置为上传的文件名_时间戳)
String tempFileName = uploadFileName + "_" + uploadTime;
// 获取用户上传路径 temp/upload/userId/dateStr/fileName
File uploadFileSave = new File(ConfigUtils.MBSDATA_TEMP_UPLOAD + File.separator + userId + File.separator + StringHelper.parseDate(uploadTime) + File.separator + tempFileName + uploadFileType);
// 父目录不存在,则需要先创建
if (!uploadFileSave.getParentFile().exists()) {
boolean createDirResult = uploadFileSave.getParentFile().mkdirs();
if (!createDirResult) {
// 创建父目录失败,后续肯定也无法保存文件
//result.setStatus(StatusType.FAILURE);
//result.setMsg(MsgType.ERROR_UPLOAD_TO_SAVE.getMsg());
return result;
}
}
try {
// 转存文件到上传文件路径/userId/fileName
multipartFile.transferTo(uploadFileSave);
// 文件操作自己处理
// TODO
} catch (Exception e) {
// 上传出现存储问题,直接返回
//result.setMsg(MsgType.ERROR_UPLOAD_TO_SAVE.getMsg(sourceFileName));
//result.setStatus(StatusType.FAILURE);
return result;
}
}
// 完成上传
//result.setMsg(MsgType.SUCCESS_OPT_ADD.getMsg());
//result.setStatus(StatusType.SUCCESS);
return result;
}
}
还是报错,需要引入相关文件上传jar包。
<!-- 文件上传 最大100M-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
引入两个额外的jar包,一个是common-io-2.2.jar,另一个是commons-fileupload-1.3.1.jar,将这个两个jar 包导入WEB-INF/lib目录里
在tomcat里面启动,然后postman调用,在相关目录下可以找到上传的文件。