在java中,有没有一种方法可以提供文件下载而不必从path读取文件?

polhcujo  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(309)

在我的程序中,我有一个getrequest(javaspark),它提供了一个用java创建的excel文件供下载。
为此,我创建excel文件,将其保存在一个文件夹中,然后通过路径读取该文件。
作品。
代码-创建:

public void createPlanWorkbook() throws Exception {
    ...
    ... 
    do something with workbook...

    workBook.write("C:\\Users\\Develope\\Desktop\\Excel.xlsm");
}

代码-请求:

get("/excelfile", ((request, response) -> {
    response.header("Content-disposition", "attachment; filename=Excel.xlsm;");

    File file = new File("C:\\Users\\Develope\\Desktop\\Excel.xlsm");
    OutputStream outputStream = response.raw().getOutputStream();
    outputStream.write(Files.readAllBytes(file.toPath()));
    outputStream.flush();
    return response;
}));

我想知道是否有其他方法来实现这一点。是否需要保存然后读取文件的步骤?或者有没有一种方法可以将javaobject中的文件直接放入请求中。
例如:

outputStream.write(ExcelCreaterObject().getWorkbook());
iq3niunx

iq3niunx1#

似乎您正在使用apache poi smartxls创建excel工作簿。看看它的javadoc,似乎 Workbook.write 方法接受要写入的outputstream。

因此,您应该能够直接写入响应流,例如:

get("/excelfile", ((request, response) -> {
    response.header("Content-disposition", "attachment; filename=Excel.xlsm;");
    File file = new File("C:\\Users\\Develope\\Desktop\\Excel.xlsm");
    OutputStream outputStream = response.raw().getOutputStream();
    // do some stuff with the workbook
    workbook.write(outputStream);
    return response;
}));

相关问题