【问题标题】:Ajax call to download file returned from RESTful serviceAjax 调用下载从 RESTful 服务返回的文件
【发布时间】:2012-10-08 22:44:24
【问题描述】:

我对 AJAX 还很陌生。我正在使用 AJAX 向服务器发送请求。该服务返回一个文本文件。但是返回数据时没有出现下载框。 返回文件的其余服务如下:

@Path("/examples")
public class ExampleCodesRest {


    @POST
    @Path("/getcode")
    @Produces(MediaType.TEXT_PLAIN)
    public Response getCodes(@Context ServletContext context){

        String in=context.getRealPath("/WEB-INF/reports.jrxml");
        File file=new File(in);

        ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition",
            "attachment; filename=\"file_from_server.log\"");
        return response.build();

    }
}

我的 AJAX 调用如下:

 $('a#link').click(function(event){
    event.preventDefault();
    $.ajax({
        url: '/reports/rest/examples/getcode',
        type: 'POST'
    });
}); 

在没有 AJAX 的情况下文件下载成功。 使用 AJAX,它不会下载文件。请指教。

【问题讨论】:

标签: jquery ajax rest


【解决方案1】:

您不能直接从 AJAX 执行此操作,但您可以通过使用 iframe 启动下载来绕过它。请参阅Ajax File download Issue 进行讨论。

【讨论】:

    【解决方案2】:

    A) 您没有回调来接收回数据
    b) 给你的代码添加错误回调,这样你就可以看到调用后是否有接收错误:

        $.ajax({
        url: '/spaconsole/rest/examples/getcode',
        type: 'POST'
        success: function (data) {
            console.log('ok');
        },
        error: function (xhr) {
          console.log(xhr);
        }
        });
    

    编辑:如果您想在页面中显示文本。如果要下载文件,不是这样的,不能用ajax

    【讨论】:

    • 感谢您的回复。我正在从服务器端获取数据,但没有提示将数据保存到磁盘。
    【解决方案3】:

    建议很简单:您不能通过 AJAX 下载文件 - 这是一项安全策略。我的意思是您可以下载数据,但不能从 JavaScript 端将其保存到磁盘。

    如果您想通过点击下载文件,则只需将href 添加到a 标签即可。或者使用文件的URL 打开一个新窗口。

    【讨论】:

    • 感谢您的回复。经过一番研究,似乎我最多可以打开一个窗口来显示内容,但我无法将其保存到磁盘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多