0

我正在尝试从一个站点下载一个文件,这个站点有一个我一直在阅读的 Life ray 服务器,但都描述了如何配置服务器而不是如何读取,我看到的所有示例都HTTPServletRequest需要请求输入我如何将 URL 传输到请求,至少从哪里开始。换句话说:我有 URL,在网页中我选择了一个日期并生成了类似的下载,我怎样才能在 java 中让它下来????我试过这个:

HttpServletRequest request = PortalUtil.getHttpServletRequest(PortletRequest);

那么如何将我的 URL 链接到 PortletRequest

4

2 回答 2

0

如果您正在编写一个 portlet,根据设计,您无法访问HttpServletRequest.

您可以做的是利用portlet 的“资源服务”生命周期阶段。在那里你可以访问一个ResourceRequestResourceResponse对象。这些对象的行为几乎就像一个HttpServletRequest/-Response对象

由于您没有命名您正在使用的框架:javax.portlet.GenericPortlet.serveResource()是您想要在纯 JSR-286 API 中覆盖的方法。

在 UI 方面,<portlet:resourceURL/>将为您的 portlet 的资源处理方法提供 URL。

这应该为您提供足够的 google-food 以找到有关如何实现不同生命周期阶段的教程 - 我无法判断您需要的详细程度。请注意,Liferay 有很多示例 portlet,您可以将它们用作示例代码的来源。

编辑:根据您在下面的评论,让我给您一些伪代码(只是在这里输入,从未编译/运行):

在 jsp 前端,例如 view.jsp:

  <a href="<portlet:resourceURL/>">Download File</a>

然后,在您的 portlet 中,假设您正在以一种或另一种方式实现 javax.portlet.GenericPortlet(例如,间接通过 Liferay 的 MVCPortlet 或任何其他超类):

  public class MyPortlet extends GenericPortlet {
     ....
     @Override
     public void serveResource(ResourceRequest request, ResourceResponse response) {
         // implement the file streaming here,
         // use ResourceResponse the way you find illustrated 
         // in samples for HttpServletResponse
     }
于 2013-10-31T21:55:07.827 回答
0

如果您有下载的 URL,那么您唯一需要做的就是针对该 URL 执行客户端请求。

您应该尝试确保您拥有的 URL 是能够为您提供预期结果的第一件事是尝试将其粘贴到新的浏览器窗口中并验证下载是否开始。

然后,如果您想通过 Java 执行该下载,您可以使用URLand URLConnectionHttpURLConnection在这种情况下)类非常轻松地完成:

String urlString = "...";   // Your URL
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn.getResponseCode() == 200) {
   InputStream stream = conn.getInputStream();
   // Read the data from the stream
}

您也可以使用Apache HTTP Client来做同样的事情。

注意PortalUtil.getHttpServletRequest(...)Liferay 内部使用,如果您正在执行客户端请求,您将无法访问该 API。

于 2013-10-31T10:56:34.063 回答