【发布时间】:2011-12-16 20:30:54
【问题描述】:
在我的控制器中,我想打开一个 pdf 并将其流式传输到浏览器。如果我不使用 open 参数,此代码可以正常工作。但是,我需要在文件名之后使用像 #search="java" 这样的开放参数。如果它是 url,则使用 open 参数可以正常工作,但是有没有办法可以使用 adobe open 参数打开文件。
我使用的代码是:
private static final String DOCUMENT_LOCATION = "C:\\testPDF\\mytest.pdf#search=" + "\"" + "java" + "\"";
@RequestMapping(method=RequestMethod.GET)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// set some response headers
response.setContentType("application/pdf");
InputStream in = new FileInputStream(DOCUMENT_LOCATION);
OutputStream out = response.getOutputStream();
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
}
【问题讨论】:
-
什么意思,你需要一个“文件名后的搜索参数”?您正在为要打开的 Java 指定文件名。您只能给它文件名,而不是与文件系统无关的随机参数。
-
是的,这就是问题所在,我可以打开文件,但我认为这不是我需要打开文件的方式。有没有办法可以在本地目录中打开文件并仍然使用 open 参数?
-
不确定如何...您可以尝试的一件事是在通过 URL 打开响应标头时检查响应标头,以查看是否有东西被发回导致浏览器/阅读器进行搜索。
-
@DaveNewton 我猜它实际上是 Adobe Reader 插件检查客户端 URL 的参数,所以没有什么特别的发回。
-
@Inerdia 这也是我的猜测,但我还是会看,因为我是那样的脾气暴躁。但是,如果 URL 包含参数,我不确定 Reader 是如何知道它不是实际文件的。还是在附件的文件名中?不知道。