spring文件上传
1、配置对上传文件大小的限制
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<!-- 设定限制的文件上传大小 单位是B:100*1024*1024=100MB -->
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="40960" />
</bean>
当上传的文件大小大于配置的
maxUploadSize
大小时,spring会抛出
MaxUploadSizeExceededException
异常,可以采用配置全局异常的方式,针对捕获到该异常做处理,代码如下:
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 文件上传文件大小异常处理
*/
@ExceptionHandler(value = MaxUploadSizeExceededException.class)
@ResponseBody
public Map jsonErrorHandler(MaxUploadSizeExceededException e) throws Exception {
return ResultMessageUtils.resultMessageWithData(false,
"上传失败:文件大小不能超过" + e.getMaxUploadSize() / / + "MB", null);
}
}
2、spring文件上传
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
@ResponseBody
public Map uploadFile(HttpServletRequest request) {
Map resMap = Maps.newHashMap();
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) (request);
Iterator its = multiRequest.getFileNames();
MultipartFile multipartFile = null;
StringBuilder tempFileName;
try {
File file = new File(tempDir);
while (its.hasNext()) {
multipartFile = multiRequest.getFile(its.next());
String name = multipartFile.getName();
String originalFilename = multipartFile.getOriginalFilename();
if (StringUtils.isEmpty(originalFilename))
continue;
tempFileName = new StringBuilder();
tempFileName.append(tempDir).append("/").append(name)
.append("_").append(originalFilename);
file = new File(tempFileName.toString());
file.deleteOnExit();
FileUtils.createDir(file);
// 上传的文件写入到指定的文件中
multipartFile.transferTo(file);
tempFileName = null;
}
resMap.put(ResultMessageUtils.CODE, true);
resMap.put(ResultMessageUtils.MSG, "文件上传成功");
} catch (Exception e) {
e.printStackTrace();
log.error("文件上传失败:" + e);
resMap.put(ResultMessageUtils.CODE, false);
resMap.put(ResultMessageUtils.MSG, "文件上传失败");
return resMap;
}
return resMap;
}
3、spring文件下载
private ResponseEntity downloadFile(String fileName, String filePrefix) {
File file = new File(tempDir + "/" + fileName);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_HTML);
if (!file.exists() || file.isDirectory()) {
return new ResponseEntity(
"alert('下载文件不存在');".getBytes(), headers,
HttpStatus.CREATED);
}
try {
if (StringUtils.isNotEmpty(filePrefix)) {
fileName = fileName.substring(filePrefix.length() + );
}
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment", fileName);
return new ResponseEntity(
FileUtils.readFileToByteArray(file), headers,
HttpStatus.CREATED);
} catch (Exception e) {
e.printStackTrace();
log.error("下载文件失败:" + e);
return new ResponseEntity(
"alert('文件下载失败');".getBytes(), headers,
HttpStatus.CREATED);
}
}