我有一个Java项目,用作webapp中的一个组件。此java代码将xls文件写入特定文件夹中。我想为这个文件提供一个下载功能,一旦文件写入完成就应该触发。 问题是 - 没有服务器环境,如何编写下载功能?
答案 0 :(得分:4)
不要写入特定文件夹中的文件。只需立即写入HTTP响应正文。下载工作应该只在webapp的代码中完成。我假设你正在使用Servlets。如果您将HTTP响应Content-Disposition
标头设置为attachment
,则浏览器将弹出另存为对话框。如果您还设置了Content-Type
标题,那么浏览器将了解如何处理它(例如,它将能够询问您要在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);
// ...
}
这样你可以在设置上述标题之后在servlet中调用它,如下所示:
yourClass.writeXls(response.getOutputStream());
更重要的是,它可以在普通的Java应用程序中轻松地重用/测试,如下所示:
yourClass.writeXls(new FileOutputStream("/path/to/foo.xls"));
答案 1 :(得分:1)
我就是这样做的。我在我的页面中显示了一个下载sql。
response.setHeader("Content-Disposition", "attachment; " +
"filename=ContactPurge.sql");
response.setContentType("application/x-sql-data");
response.getWriter().write(procsql);
response.getWriter().write(sql);
response.flushBuffer();