我需要从 Intranet http 服务器读取二进制文件并将其下载到公共。
架构
内网文件服务器(Apache)=1 <-->公共http服务器(Apache Tomcat)=2<-->互联网授权用户=3
如何在不保存到服务器 2 上的文件系统的情况下发布它
感谢您的回答,我是 java 新手。
对不起我的英语不好。
在这种情况下,我只能想到两种方法:
在 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 不是一个好的选择。它旨在处理文本数据。你需要 Servlet 来做二进制流。您可以在 HttpServletResponse 上设置如下内容:
resp.setContentType("application/octet-stream");
resp.setContentLength(length);
resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"" );
因此内容将以您设置的名称作为附件发送。
使用 java.net.URL(或另一个 http 客户端)从 1 中读取,然后将其打印出来(响应 3)。
(在 Apache Http Server 或 Nginx 中,这可以使用反向代理来实现。)