有没有办法在不从 Java 中的路径读取文件的情况下提供文件下载?

Is there a way to provide file download without reading the file from path in Java?

在我的程序中,我有一个 getRequest (JavaSpark),它为我提供了一个在 Java 中创建的 Excel 文件供下载。

为此,我创建了 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());

您似乎正在使用 Apache POI SmartXls 创建 Excel 工作簿。查看它的 Javadoc,似乎 Workbook.write 方法接受要写入的输出流。

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

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