天天看點

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

繼續閱讀