Spring 文件上传/下载 案例代码

≯℡__Kan透↙ 提交于 2020-08-16 16:55:54
/**
 * @author zhiwei_yang
 * @time 2020-6-18-8:29
 */
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {

    /**
     * 文件下载
     *
     * @param downPath
     * @return
     */
    @PostMapping("/down")
    public ResponseEntity<byte[]> down(@RequestParam("downPath") String downPath) {
        if (StringUtils.isEmpty(downPath)) {
            return ResponseEntity.notFound().build();
        }

        String fileName = downPath.substring(downPath.lastIndexOf(File.separator) + 1);
        InputStream inputStream = null;
        try {
            if (StringUtils.startsWithIgnoreCase(downPath, ResourceUtils.FILE_URL_PREFIX)) {
                inputStream = new FileInputStream(ResourceUtils.getFile(downPath));
            } else if (StringUtils.startsWithIgnoreCase(downPath, "http")) {
                inputStream = ResourceUtils.getURL(downPath).openStream();
            } else {
                inputStream = this.getClass().getClassLoader().getResourceAsStream(downPath);
            }

            if (null == inputStream) {
                return ResponseEntity.notFound().build();
            }

            byte[] data = new byte[inputStream.available()];
            IOUtils.read(inputStream, data);
            HttpHeaders headers = new HttpHeaders();
            headers.add(HttpHeaders.CONTENT_TYPE, "application/octet-stream");
            headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName);
            log.info("文件下载成功 filePath:{}, 大小:{}", downPath, data.length);
            return ResponseEntity.ok().headers(headers).body(data);
        } catch (IOException ioException) {
            log.error("文件下载故障 path:{}", downPath);
            return ResponseEntity.unprocessableEntity().build();
        } finally {
            IOUtils.closeQuietly(inputStream);
        }
    }

    /**
     * 文件上传: MultipartResolver解析
     * @param httpServletRequest 请求
     * @return
     */
    @PostMapping("/upload/simple")
    public Boolean uploadFile(HttpServletRequest httpServletRequest, @RequestParam("uploadPath") String uploadPath) {

        //多文件头请求: 文件上传
        if (httpServletRequest instanceof MultipartHttpServletRequest) {
            MultiValueMap<String, MultipartFile> multipartFileMultiValueMap = ((MultipartHttpServletRequest) httpServletRequest).getMultiFileMap();
            if (CollectionUtils.isEmpty(multipartFileMultiValueMap)) {
                return false;
            }

            File uploadDir = new File(uploadPath);
            if (!uploadDir.exists()) {
                uploadDir.mkdirs();
            }
            if (uploadDir.isFile()) {
                uploadDir.delete();
                uploadDir.mkdirs();
            }

            for (Map.Entry<String, MultipartFile> entry : multipartFileMultiValueMap.toSingleValueMap().entrySet()) {
                MultipartFile multipartFile = entry.getValue();
                FileOutputStream fileOutputStream = null;
                try {
                    fileOutputStream = new FileOutputStream(uploadPath + File.separator + multipartFile.getOriginalFilename());
                    fileOutputStream.write(multipartFile.getBytes());
                    fileOutputStream.flush();
                    log.info("表单字段名:{},文件【{}】上传成功", entry.getKey(), multipartFile.getOriginalFilename());

                } catch (IOException exception) {
                    log.error("文件[{}]上传失败", multipartFile.getOriginalFilename(), exception);
                    return false;
                } finally {
                    IOUtils.closeQuietly(fileOutputStream);
                }
            }
            return true;
        }
        return false;
    }

    /**
     * 文件上传: MultipartResolver解析
     * @param multipartFile 上传文件
     * @return
     */
    @PostMapping("/upload/advance")
    public Boolean uploadFile(@RequestParam("multipartFile") MultipartFile multipartFile, @RequestParam("uploadPath") String uploadPath) {
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }
        if (uploadDir.isFile()) {
            uploadDir.delete();
            uploadDir.mkdirs();
        }

        try {
            //multipartFile 默认文件数据持久化API
            multipartFile.transferTo(new File(uploadPath + File.separator + multipartFile.getOriginalFilename()));
            log.info("表单字段名:{},文件【{}】上传成功", multipartFile.getName(), multipartFile.getOriginalFilename());
            return true;
        } catch (IOException exception) {
            log.error("文件[{}]上传失败", multipartFile.getOriginalFilename(), exception);
            return false;
        }
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!