ajax请求不能下载文件(转载)

最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等

但是起初老是下载失败,并且弹出下面的乱码:

前台请求代码:

[html] view plain copy

  1. $(‘#fileexcel‘).unbind(‘click‘).bind(‘click‘,function(){
  2. alert("我要下载了");
  3. $.ajax({
  4. type:‘post‘,
  5. url:‘media‘,
  6. data:null,
  7. async:true,
  8. success : function(msg){
  9. alert(msg);
  10. }
  11. })
  12. })

看起来貌似没有任何问题,但就不能下载。

本来认为是后台代码有问题,但是将网上的各种demo放进去还是有问题。

在坑了一天后,终于发现问题所在了。

那就是请求方式有问题,文件下载的请求是不能写在ajax里面的!

写成下面这样的就可以了:

[html] view plain copy

  1. <a href="/media">点击下载Excel</a>
  2. 或者
  3. location.href = ‘/media‘;

这次点击下载就出现如下理想效果。

然后总结一下为什么下载请求不能放在ajax里发送:

原因:因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。

时间: 2025-01-20 06:53:06

ajax请求不能下载文件(转载)的相关文章

关于ExtJS的两种Ajax请求和回调问题(转载)

1. Ext.form.Action.Submit的配置选项success.failure 根据返回json中success属性判断的,如果success为true,则success,false则failure,如果无json中无success属性,failure,故要提示操作是否成功,必须要返回success属性. loginFormPanel.getForm().submit({ method:'POST', params:{ username:username, password:pass

SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)

1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId>

WPF带cookie get/post请求网页,下载文件,图片,可保持会话状态

直接写成啦一个MyNet.cs类方便使用 get/post方法请求 //get请求 MyNet.SendRequest("http://www.baidu.com"); //post请求 var param = new Dictionary<string, string> { {"a","this is a param" }, {"b","this second param"} }; MyNet

使用FormData进行Ajax请求上传文件到controller层的实现

需求背景: 页面上传一个文件到controller层,然后后台对文件进行处理.文件类型不限. 第一种:单纯的上传文件 页面功能展现: 第一步:首先需要两个jar commons-fileupload-1.3.2.jarcommons-io-2.4.jar 版本不限: pom文件中相应两个jar: [html] view plain copy print? <dependency> <groupId>commons-io</groupId> <artifactId&

LoadRunner下载文件脚本

LoadRunner下载文件脚本 在看普泽关于pezybase的测试报告的时候,发现里面有用到jmeter(http协议)并发测试下载文件,考虑到后面可能需要在公司pezybase的并发下载,把之前使用过的loadrunner下载文件脚本重新运行和整理一下. 一.http协议 loadrunner使用http协议是无法录制到下载过程的,只会往服务器发送一个下载请求,其实服务器已经把数据返回给客户端了,但是loadrunner是录制不到保存文件到本地这个过程,所以就是需要我们手动把收到的内容保存打

使用多线程下载文件思路

01 开启多条线程,每条线程都只下载文件的一部分(通过设置请求头中的Range来实现) 02 创建一个和需要下载文件大小一致的文件,判断当前是那个线程,根据当前的线程来判断下载的数据应该写入到文件中的哪个位置.(假设开5条线程来下载10M的文件,那么线程1下载0-2M,线程2下载2-4M一次类推,当接收到服务器返回的数据之后应该先判断当前线程是哪个线程,假如当前线程是线程2,那么在写数据的时候就从文件的2M位置开始写入) 03 代码相关:使用NSFileHandle这个类的seekToFileO

.NetCore之下载文件

本篇将和大家分享的丝.NetCore下载文件,常见的下载有两种:A标签直接指向下载文件地址和post或get请求后台输出文件流的方式,本篇也将围绕这两种来分享:如果对您有好的帮助,请多多支持. 允许站点不识别content-type下载文件(即:不受mime类型限制下载) 如何允许下载.nupkg和.apk后缀的文件 Razor模板的post下载文件例子 半年来使用NetCore的一些感想和焦虑 允许站点不识别content-type下载文件(即:不受mime类型限制下载) 对于netcore的

如何在启用JWT Token授权的.NET Core WebApi项目中下载文件

背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt Token授权,所以每个Api请求都需要传递一个Bearer Token. 这一切都看起来理所当然,但是当需要从WebApi下载文件的时候,出现了问题.以前下载文件的时候,我们可以在Javascript中使用window.open('[文件下载Api]')的方式下载文件,但是这个方法不能接收Bearer

ajax请求过程中下载文件在火狐下的兼容问题

项目中碰到的问题,记录如下. 需求很简单,点击一个文件链接下载该文件,同时向后台发送请求.需求很常见,用户点击下载后通常要进行下载量的统计,统计的话可以利用 script标签 或者 img标签(图片ping) 的跨域能力,将它们的 src 属性指向统计地址,但是这次用了 ajax 进行统计,遂出现了这个问题. demo 代码如下: 复制代码<a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.