天天看点

Spring文件上传下载

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

继续阅读