如何在AEM页面上显示来自Webservice的Excel、PDf文件

如何在AEM页面上显示来自Webservice的Excel、PDf文件,aem,sling,Aem,Sling,我尝试做以下工作:Web服务的响应是一个excel(对pdf的单独调用)文件。我需要在aem页面上将此文件显示为链接,当用户单击该链接时,浏览器将打开(或下载)该文件 用例:在客户页面上,有一个部分包含到订单历史记录(Excel文件)、发票(PDF文件)、产品目录(Excel文件)的链接。单击每个链接,调用webservice并获取相应的文件 如何实现这一点?在Scott的帮助下: 以下是我的解决方案: 从UI中,将操作提交到Servlet <form name="importFileF

我尝试做以下工作:Web服务的响应是一个excel(对pdf的单独调用)文件。我需要在aem页面上将此文件显示为链接,当用户单击该链接时,浏览器将打开(或下载)该文件

用例:在客户页面上,有一个部分包含到订单历史记录(Excel文件)、发票(PDF文件)、产品目录(Excel文件)的链接。单击每个链接,调用webservice并获取相应的文件

如何实现这一点?

在Scott的帮助下:

以下是我的解决方案:

  • 从UI中,将操作提交到Servlet

    <form name="importFileForm" method="get" action="/services/getData">
    <input type="submit" title="Submit" value="Submit" name="bttnAction">
    </form>
    
    }

  • public class TTIGetServlet extends SlingAllMethodsServlet {
      @Override
      protected void doGet(SlingHttpServletRequest request,SlingHttpServletResponse response) throws ServletException,IOException { 
        ...
        ...
        String serviceurl = <<< your webservice url>>>
        HttpClient httpclient = HttpClients.custom().build();
        generateFile(serviceurl, httpclient, request, response);
    
        RequestDispatcher dispatcher = request.getRequestDispatcher("/content/ttii/en/importfiletest.html");
        dispatcher.forward(request, response);        
      }
    }
    
    public static void generateFile(String serviceurl,
                                HttpClient httpclient,
                                SlingHttpServletRequest httpRequest, 
                                SlingHttpServletResponse httpResponse) throws ClientProtocolException, IOException {
    
       HttpResponse response;
       HttpGet httpGet = new HttpGet(serviceURL);
    
       // Makes the call to WebService
       response = httpclient.execute(httpGet);
    
       // CORE LOGIC
       if (response!=null) {
         ContentType contentType = ContentType.getOrDefault(response.getEntity());
        String mimeType = contentType.getMimeType();
    
        if (mimeType.equals(MIMETYPE_JSON)) {
            // Out of context here... 
        } else {
            // SHOW THE FILE
            ServletOutputStream sos = httpResponse.getOutputStream();                
            httpResponse.setContentType("application/vnd.ms-excel");
            httpResponse.setHeader("Content-Disposition", "attachment;filename=test.xls");
    
            BufferedHttpEntity buf = new BufferedHttpEntity(response.getEntity());
            InputStream istream = buf.getContent();   
    
            sos.write(FileHelper.writeFiles(istream));                
            sos.flush();     
        }
    }