-2

以适当的格式生成 PDF 文件我在这里询问如何在其响应中提示保存 PDF。

现在我想让文件保存在容器文件系统上的预定目录中(比如 Windows 上的 D:\pdf)。因此,如果我理解正确而不是 ServletOutputStream,我将需要一个 FileOutputStream。

所以我想我需要绕过写入 ServletOutputStream 并使用文件 IO。你觉得我的方法怎么样?任何建议都会非常感激!

编辑:我对流的工作方式有点困惑。一般来说,关于服务器的本地文件系统。无论如何,我很感激你对我的态度,让我的困惑消失

4

3 回答 3

2

You have no control over where it will be saved on the user's computer. Imagine a servlet writing files to system directories and overwriting system files.

FileFooStream will write to the server's local disk. It should work fine, as long as the server allows file access(App Engine does not), and will write similarly to a desktop application.

于 2013-09-05T16:14:27.587 回答
1

据我所知,您无法通过 Web 程序操作客户端目录。这就是浏览器的安全性出现的地方;JVM 沙箱也不允许任何带有可疑活动的小程序执行。

另一种方法是让客户决定如何处理 pdf 文件。为此,您可以使用以下步骤:

  1. 在响应头中使用 Mime 类型告诉浏览器您将在输出流上编写 PDF。
  2. 浏览器将接受您的字节并尝试使用 Adob​​e PDF 阅读器(内置于浏览器中)之类的插件来显示它。
  3. 如果浏览器确实有插件,它会让用户决定如何处理这个文件(保存/打开提示)。
  4. 然后用户可以决定如何打开 PDF 文件。

您可以从这篇文章中了解如何执行此操作。

于 2013-09-05T16:24:29.070 回答
1

调查这个问题,我猜你对 Servlet 的工作方式有点困惑。

请参见 servlet 是在服务器端的 JVM 上执行的 Java 类。您从请求中获得的内容和设置到响应中的内容是您与底层 HTTP 服务器进行通信的一种方式,该服务器最终将使用您的请求和响应中的属性来生成文本,并将其传输到客户端浏览器。

因此,您将在 Servlet 中创建的文件输入/输出流将使您能够访问正在执行该 servlet 的机器的目录。在这里它将在您的服务器上执行。因此,充其量您可以控制,应使用文件输入/输出流将传入文件保存在服务器上,但您无法使用 Servlet 访问客户端计算机目录。

PS 我没有考虑将小程序发送到浏览器的可能性。

于 2013-09-05T16:40:40.993 回答