在springboot项目中优雅地实现文件下载

@RequestMapping("/fileDownLoad2")
    public ResponseEntity fileDemo(){
        try {
            String fileName = "D:/yuSys/02 运行官方例子1575947491341.pptx";
            // 获取本地文件系统中的文件资源
            FileSystemResource resource = new FileSystemResource(fileName);
            // 解析文件的 mime 类型
            String mediaTypeStr = URLConnection.getFileNameMap().getContentTypeFor(fileName);
            // 无法判断MIME类型时,作为流类型
            mediaTypeStr = (mediaTypeStr == null) ? MediaType.APPLICATION_OCTET_STREAM_VALUE : mediaTypeStr;
            // 实例化MIME
            MediaType mediaType = MediaType.parseMediaType(mediaTypeStr);
            /*
             * 构造响应的头
             */
            HttpHeaders headers = new HttpHeaders();
            // 下载之后需要在请求头中放置文件名,该文件名按照ISO_8859_1编码。
            String filenames = new String("123.ppt".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
            headers.setContentDispositionFormData("attachment", filenames);
            headers.setContentType(mediaType);
            log.info("sucess");
            /*
             * 返还资源
             */
            return ResponseEntity.ok()
                    .headers(headers)
                    .contentLength(resource.getInputStream().available())
                    .body(resource);
        } catch (IOException e) {
            log.error("文件读写错误", e);
            return null;
        }
    }

你可能感兴趣的:(在springboot项目中优雅地实现文件下载)