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() / 1024 / 1024 + "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() + 1);
        }
        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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值