在我的 jsp 中,有人想将查询结果导出到 csv。不能使用框架。目前,流程如下:
- 按下按钮,转到servlet
- 为 csv 准备数据
- 制作csv并保存到服务器
- 回到jsp,让他们从锚标签下载新制作的文件。
问题是,我不想在服务器上创建这个文件,因为我必须在之后处理它,但我仍然想给用户“另存为”窗口。那么,有没有办法,例如在会话中放置一个 OutputStream 对象来实现这个结果?谢谢你们!
servlet 可以生成任何类型的内容。因此,当您单击按钮运行 servlet 时,只需让 servlet 将文件写回客户端即可。您需要将Content-type
标题设置为“ text/csv ”(并确保正确设置编码)。您不需要设置Content-Length
标题;浏览器可以处理。
当 servlet 向浏览器返回数据时,将提示用户保存文件或使用应用程序打开它。
是的。您无需保存文件。只需将其保存在会话中并将其在内存中发送到OutputStream
. 我会在给定时间或交付后将其丢弃以节省内存。
适当地设置内容类型和内容配置。这将意味着浏览器正确解释输出并提示您的用户保存它或启动适当的应用程序。
有关更多详细信息,请参阅此 SO 答案。