Ajax JAX-RS |从Base64编码数据下载PDF

Ajax JAX-RS |从Base64编码数据下载PDF,ajax,spring,rest,jax-rs,Ajax,Spring,Rest,Jax Rs,各位 我有一个REST控制器,它调用一个服务来获取表示PDF的Base64编码字符串。我通过AJAX调用调用REST端点。我基本上希望用户在点击链接时下载一个PDF文件 以下是REST控制器: @GET @Path("/getinvoice/{invoiceid}.pdf") @Produces("application/pdf") @Consumes(MediaType.TEXT_HTML) public Response invoice(@PathParam(

各位

我有一个REST控制器,它调用一个服务来获取表示PDF的Base64编码字符串。我通过AJAX调用调用REST端点。我基本上希望用户在点击链接时下载一个PDF文件

以下是REST控制器:

@GET
    @Path("/getinvoice/{invoiceid}.pdf")
    @Produces("application/pdf")
    @Consumes(MediaType.TEXT_HTML)
    public Response invoice(@PathParam("invoiceid") final String invoiceid) throws ShoppingCartException, UnexpectedErrorFault_Exception,
            MalformedQueryFault_Exception, InvalidQueryLocatorFault_Exception, LoginFault_Exception, IOException {


        BASE64Decoder decoder = new BASE64Decoder();
        byte[] decodedBytes = decoder.decodeBuffer(aService.getInvoiceBody(invoiceid));
        ResponseBuilder response = Response.ok(new ByteArrayInputStream(decodedBytes));
        response.header("Content-Disposition", "attachment; filename=test.pdf");
        return response.build();
}
该服务返回一个BASE64编码的字符串,表示一个PDF,我在谷歌搜索后将其转换为字节数组。我只想让用户在点击链接时看到一个名为“invoiceid}.pdf”的文件下载弹出窗口。到目前为止,返回了响应,但什么也没有发生

如果您有任何建议或帮助,我们将不胜感激

更新:作为一个快速测试,我禁用了Ajax调用,并直接从中调用REST端点。然后我成功地下载了这个文件。也许由于某些安全原因,这无法通过Ajax实现。
此外,我希望用户在后端处理时看到某种“请稍候”消息。我也非常感谢您对这方面的任何意见。

我真的不知道谷歌搜索的内容吗?如果你想当有人搜索你的页面时,他们在搜索结果中看到链接,你想在不离开谷歌搜索页面的情况下下载文件,我不知道该怎么做。如果该链接位于您的页面上,则只需拥有指向该资源的链接即可。对于AJAX调用来说,这有点困难,您需要了解一些JavaScript才能打开“另存为”对话框。就我个人而言,我不知道如何使用JavaScript来实现这一点。@peeskillet我对我的问题不太清楚表示歉意。关于谷歌搜索的部分完全可以忽略。这只是为了传达我读到了一些实现这一点的方法,其中一个建议将数据转换为字节数组。看看@peeskillet发布的检查问答,你需要使用iframe通过浏览器显示下载弹出窗口。由于对URL的直接调用工作正常,因此可以在IFrame中加载相同的URL。一旦在IFrame中点击您的URL,浏览器将显示弹出消息以保存您不需要显示的文件,请稍候消息,因为下载将立即开始。