我需要从内部网http服务器读取二进制文件,并将其下载到公众。
模式
内部网文件服务器(Apache)=1<-->公共http服务器(Apache Tomcat)=2<-->互联网授权的user=3
如何在不保存到服务器2上的文件系统的情况下释放此文件
谢谢你的回答,我是java的新手。
对不起,我的英语不好。
发布于 2012-05-04 14:10:59
使用java.net.URL (或另一个http客户端)读取1,然后将其打印出来(响应3)。
(在Apache Http Server或Nginx中,这可以使用反向代理来实现。)
发布于 2012-05-04 10:35:37
在这种情况下,我只能想到两种方法:
在JSP页面中使用:
<% response.sendRedirect("http://intranet_address");%>或
使用标准标记库的<c:redirect url="http://intranet_address"/>。
在Servlet页面中使用:
response.setStatus(302);
response.setHeader("Location", "http://intranet_address"); or just
response.sendRedirect("http://intranet_address");我从未在intranet上尝试过第一种方法,但考虑到intranet地址对internet用户无效的事实,我认为它不会起作用。
现在我们只剩下第二种方法--使用代理层。代理功能可以通过多种方式实现:简单的方式可能只是Servlet后面的一个bean,用于打开指向文件服务器1的URL,读取文件并通过Servlet响应流将其发送给用户,或者您也可以使用某种嵌入式HTTPClient。
JSP:因为您要下载二进制文件,所以JSP不是一个好的选择。它的目的是处理文本数据。你需要Servlet来做二进制流。您可以在您的HttpServletResponse上设置如下内容:
resp.setContentType("application/octet-stream");
resp.setContentLength(length);
resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"" );因此,内容将以您设置的名称作为附件发送。
https://stackoverflow.com/questions/10441567
复制相似问题