当前位置: 首页 > 知识库问答 >
问题:

为什么不能使用ajax请求下载文件?

钱瑞
2023-03-14

在我们的应用程序中,我们需要实现以下场景:

  1. 从客户端发送请求
  2. 服务器处理请求并生成文件
  3. 服务器返回文件作为响应
  4. 客户端浏览器显示文件下载弹出对话框,允许用户下载文件

我们的应用程序是基于ajax的应用程序,因此发送ajax请求(如使用jquery.ajax()函数)将非常简单方便。

但是在googilng之后,事实证明文件下载只有在使用非ajax POST请求时才是可能的(就像在这个流行的SO线程中描述的那样)。所以我们需要实现更丑陋和更复杂的解决方案,需要构建form的超文本标记语言结构和嵌套的隐藏字段。

有人能简单地解释一下为什么ajax请求不能用于下载文件吗?这背后的机制是什么?

共有3个答案

颜功
2023-03-14

这也是我两天前问自己的问题。有一个使用ExtJS编写客户端的项目,服务器端实现是在ASP上进行的。网我必须将服务器端翻译成Java。有一个下载XML文件的函数,该文件是服务器在客户机发出Ajax请求后生成的。我们都知道,在Ajax请求后下载文件,仅仅将其存储在内存中是不可能的。但是在原始应用程序中,浏览器显示通常的对话框,其中包括打开、保存和取消下载选项。ASP。Net以某种方式改变了标准行为。。。我花了两天的时间再次证明,并没有办法按要求以通常的方式下载文件。。。唯一的例外是ASP。网这里是ASP。网络代码

public static void WriteFileToResponse(byte[] fileData, string fileName)
    {
        var response = HttpContext.Current.Response;

        var returnFilename = Path.GetFileName(fileName);
        var headerValue = String.Format("attachment; filename={0}", 
            HttpUtility.UrlPathEncode(
                String.IsNullOrEmpty(returnFilename) 
                    ? "attachment" : returnFilename));
        response.AddHeader("content-disposition", headerValue);
        response.ContentType = "application/octet-stream";
        response.AddHeader("Pragma", "public");

        var utf8 = Encoding.UTF8;
        response.Charset = utf8.HeaderName;
        response.ContentEncoding = utf8;
        response.Flush();
        response.BinaryWrite(fileData);
        response.Flush();
        response.Close();
    }

这个方法是从WebMethod调用的,反过来,它又是从ExtJS. A调用的jax.request.这就是魔力。对我来说,我以servlet和隐藏的iframe结束...

拓拔飞飙
2023-03-14

这可以使用名为Blob的新HTML5特性来完成。有一个库文件保存器。可以用作该功能顶部的包装器的js。

郑博厚
2023-03-14

这与AJAX无关。当然,您可以使用AJAX下载文件。但是,文件将保留在内存中,即您无法将文件保存到磁盘。这是因为JavaScript无法与磁盘交互。这将是一个严重的安全问题,在所有主要浏览器中都会被阻止。

 类似资料:
  • 问题内容: 在我们的应用程序中,我们需要实现以下场景: 客户发送请求 服务器处理请求并生成文件 服务器返回文件作为响应 客户端浏览器显示文件下载弹出对话框,并允许用户下载文件 我们的应用程序是基于ajax的应用程序,因此对于我们来说,发送ajax请求(就像使用jquery.ajax()function一样)非常容易和方便。 但是在googilng之后,事实证明只有在使用非ajaxPOST请求时才可

  • 问题内容: 在我们的应用程序中,我们需要实现以下场景: 客户端发送请求 服务器处理请求并生成文件 服务器返回文件作为响应 客户端浏览器显示文件下载弹出对话框,并允许用户下载文件 我们的应用程序是基于ajax的应用程序,因此对于我们来说,发送ajax请求(就像使用function一样)非常容易和方便。 但是在googilng之后,事实证明只有在使用非ajax POST请求时才可以下载文件(如该流行的

  • 问题内容: 我想在单击按钮时发送“ ajax下载请求”,所以我尝试了这种方式: javascript: download.php: 但是没有按预期工作,我该怎么办?先感谢您 问题答案: 2015年4月27日更新 进入HTML5场景的是download属性。它支持在Firefox和Chrome,并很快来到IE11。根据您的需求,只要您要下载的文件与您的网站位于同一来源,就可以使用它代替AJAX请求(

  • 问题内容: 当我单击按钮时,我想发送“ ajax下载请求”,因此我尝试了这种方式: javascript: download.php: 但是没有按预期工作,我该怎么办?先感谢您 问题答案: 进入HTML5场景的是download属性。它支持在Firefox和Chrome,并很快来到IE11。根据您的需求,只要您要下载的文件与您的网站位于同一来源,就可以使用它代替AJAX请求(或使用)。 您始终可以

  • 问题内容: 以下是ajax请求。 这就是delete.php 运行代码后,它将成功删除文件,但不会显示任何消息。 我也尝试将ajax请求更改为: 仍然不显示该消息。所以我想在delete.php文件中出了点问题。请帮忙。 问题答案: 进行jquery + ajax + php的最佳方法如下: jQuery的: PHP:

  • 问题内容: 我想知道是否可以对特定网址进行ajax发布请求,并且仅应要求在数据中接收zip文件?还是我必须发送两个请求…一个,是为了使已创建的服务器内的zip文件的URL成为另一个,而另一个要下载该zip文件? 问题答案: 本机答案是否定的! 但是你可以这样做。 您的ajax请求: 您的php文件: