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);
}
}