有没有办法在不从 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;
}));
在我的程序中,我有一个 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;
}));