代码之家  ›  专栏  ›  技术社区  ›  Martin Čuka

如何在SpringRestController中下载Excel文件

  •  1
  • Martin Čuka  · 技术社区  · 8 年前

    我正在使用apache poi生成 XLSX 文件。

    我想从Spring控制器返回那个文件。以下是我迄今为止所做的工作:

    控制器:

    @RequestMapping(method = RequestMethod.GET)
        public HttpEntity<byte[]> createExcelWithTaskConfigurations(HttpServletResponse response) throws IOException {
            byte[] excelContent = excelService.createExcel();
    
            HttpHeaders header = new HttpHeaders();
            header.setContentType(new MediaType("application", "vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
            header.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=my_file.xls");
            header.setContentLength(excelContent.length);
    
            return new HttpEntity<>(excelContent, header);
        }
    

    是否可以从REST控制器返回实际的Excel文件,以便用户将其下载到计算机上?至于现在控制器返回字节[],但我想返回它的实际文件。我怎样才能做到?

    2 回复  |  直到 8 年前
        1
  •  1
  •   MyTwoCents    8 年前

    这是我用来下载txt文件的工作代码。Excel文件也应该如此。

    @GetMapping("model")
    public void getDownload(HttpServletResponse response) throws IOException {
    
    
        InputStream myStream = your logic....
    
        // Set the content type and attachment header.  for txt file
        response.addHeader("Content-disposition", "inline;filename=sample.txt");
        response.setContentType("txt/plain");
    
        // xls file
        response.addHeader("Content-disposition", "attachment;filename=sample.xls");
        response.setContentType("application/octet-stream");
    
        // Copy the stream to the response's output stream.
        IOUtils.copy(myStream, response.getOutputStream());
        response.flushBuffer();
    }
    
        2
  •  1
  •   Mafuj Shikder    8 年前

    多亏了@jar.jar.beans。链接如下: Downloading a file from spring controllers

    @RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
    @ResponseBody 
    public FileSystemResource getFile(@PathVariable("file_name") String fileName) {
        return new FileSystemResource(myService.getFileFor(fileName)); 
    }
    
    推荐文章