Java文件下载代码设计问题

标签 java

我有一个 Java 项目,用作 Web 应用程序中的组件。该java代码在特定文件夹中写入一个xls文件。我想为此文件提供下载功能,该功能应在文件写入完成后立即触发。 问题是——没有服务器环境,如何编写下载功能?

最佳答案

不要写入特定文件夹中的文件。只需立即写入 HTTP 响应正文即可。下载工作应该在 web 应用程序的代码中完成。我假设您正在使用 Servlet。如果您将 HTTP 响应 Content-Disposition header 设置为 attachment,则浏览器将弹出一个另存为对话框。如果您还设置了 Content-Type header ,那么浏览器将了解如何处理它(例如,它将能够询问您想在 Excel 中打开它还是保存?等等)。

response.setHeader("Content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

// Now write xls to response.getOutputStream() instead of FileOutputStream.

如果该 Java 项目的 API 设计良好,那么您应该有一个如下所示的方法:

public void writeXls(OutputStream output) throws IOException {
    // Do your job to write xls to output. E.g. if you were using POI HSSF:
    // WritableWorkbook workBook = Workbook.createWorkbook(output);
    // ...
}

这样,您就可以在设置上述 header 后在 servlet 中调用它,如下所示::

yourClass.writeXls(response.getOutputStream());

更重要的是,它可以在普通的 Java 应用程序中轻松地重用/测试,如下所示:

yourClass.writeXls(new FileOutputStream("/path/to/foo.xls"));

关于Java文件下载代码设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125920/

相关文章:

java - NullPointerException SQLiteAssetHelper

java - 我可以修改一个 "referenced"整型变量吗?

java - 如何使用 paho mqtt java 实现请求-响应模式?

java - 如何让 JVM 使用服务器的最大(全部剩余)内存

java - 编写 customConsumerFactory 和 customKafkaListenerContainerFactory 时不会自动加载 spring kafka 属性

java - 使用 JPA 进行复杂查询

java - 在tomcat服务器中部署war文件

java - 将 JCombobox 渲染到正确的问题

java - 从 @controller 读取 Spring 配置文件

java - 专有 XML 文件(Roche LC480 .ixo 文件)中的二进制字段编码/序列化格式