Jquery+asp.net实现Ajax方式文件下载实例代码

如果文件中,需要下载一个文件,一般用超级链接的方式即可。

但是如果是图片,浏览器会默认打开图片浏览,不是实现下载。

考虑可以使用jquery ajax提交form请求的方式。

jquery download函数:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 // Ajax 文件下载

    jQuery.download = function (url, data, method) {

        // 获取url和data

        if (url && data) {

            // data 是 string 或者 array/object

            data = typeof data == ‘string‘ ? data : jQuery.param(data);

            // 把参数组装成 form的  input

            var inputs = ‘‘;

            jQuery.each(data.split(‘&‘), function () {

                var pair = this.split(‘=‘);

                inputs += ‘<input type="hidden" name="‘ + pair[0] + ‘" value="‘ + pair[1] + ‘" />‘;

            });

            // request发送请求

            jQuery(‘<form action="‘ + url + ‘" method="‘ + (method || ‘post‘) + ‘">‘ + inputs + ‘</form>‘)

        .appendTo(‘body‘).submit().remove();

        };

    };

用jquery的方式组织一个字符串,模拟提交一个form请求。

也就是动态渲染表单,提交表单后再删除。

html的图片代码:


1

<img onclick=\"GetSrcFromSvc(‘" + name + "‘)\" src=\"" + imgurl + "\" //>

GetSrcFromSvc函数实现调用:


1

 $.download("http://localhost:2204/wx/Default.aspx""img=" + url, ‘post‘);

asp.net服务器端代码:aspx文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite下载超过

 400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。  ///指定被输出图像的地址

 

        string imgurl = Request.Form["img"];

        string FileName = Server.MapPath(imgurl);

        //   System.Drawing.Image img = System.Drawing.Image.FromFile(imgurl);

        //   MemoryStream ms = new System.IO.MemoryStream();

        //   img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

        //   img.Dispose();

        //   context.Response.ClearContent();

        //   context.Response.ContentType = "image/jpg";

        //   context.Response.BinaryWrite(ms.ToArray());

        //   //context.htm = htm&File(FileName);

        //   ////將buffer 中的stream全部送出

        //    context.Response.Flush();

        ////   context.Response.End();

        string filePath = Server.MapPath(imgurl);//路径 

        if (File.Exists(filePath))

        {

            FileInfo fileinfoo = new FileInfo(filePath);

            Response.ContentType = "application/x-zip-compressed";

            Response.AddHeader("Content-Disposition""attachment;filename=" + fileinfoo.Name + "");

            Response.TransmitFile(filePath);

        }

        else

        {

            htm = htm&("未找到文件。");

        }

asp.net 流方式下载:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

     string imgurl = Request.Form["img"];

        string FileName = Server.MapPath(imgurl);

        if (File.Exists(FileName))

        {

            FileInfo fileinfoo = new FileInfo(FileName);

            //以字符流的形式下载文件

            FileStream fs = new FileStream(FileName, FileMode.Open);

            byte[] bytes = new byte[(int)fs.Length];

            fs.Read(bytes, 0, bytes.Length);

            fs.Close();

            Response.ContentType = "application/octet-stream";

            //通知浏览器下载文件而不是打开

            Response.AddHeader("Content-Disposition""attachment;   filename=" + HttpUtility.UrlEncode(fileinfoo.Name, System.Text.Encoding.UTF8));

            Response.BinaryWrite(bytes);

            Response.Flush();

            Response.End();

        }

测试环境

win7+IE9 IE10 。手机端:uc。

其他浏览器无法预计效果。

时间: 2024-12-15 14:31:28

Jquery+asp.net实现Ajax方式文件下载实例代码的相关文章

通过jQuery或ScriptManager以Ajax方式访问服务

1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服务对外公开,调用也方便,更加专业些.如果不是要公开的接口,handler完全可以胜任了.下面是将webservice发布的效果. 客户端在调用服务端的服务时,最简单的莫过于使用jQuery了.当然微软也提供了ScriptMananger来访问WebService.他们之间的关系可以用下图说明. 2.

jQuery添加和删除元素class属性实例代码

jQuery添加和删除元素class属性实例代码:元素的的class属性一般是用来设置样式之用,所以添加或者删除都意味着改变元素的样式,下面就介绍一下如何使用jQuery来删除和添加元素的class属性值,希望能够给大家带来一定的帮助.代码实例如下: function switchTeachControl() { var target=$("#thediv"); if(target.hasClass("controlOff")) { target.removeCla

JQuery处理json与ajax返回JSON实例[转]

json数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法. 一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内部各个数据之间通过“,”分割,如[“AreaId”:”123”,”AreaId”:”345”]. 很多情况下是对象数组,那就是这样:  代码如下

JQuery处理json与ajax返回JSON实例

一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内部各个数据之间通过“,”分割,如[“AreaId”:”123”,”AreaId”:”345”]. 很多情况下是对象数组,那就是这样: 代码如下 复制代码 [{“AreaId”:”123”},{“AreaId”:”345”}] 其实数组也是一个对象,上面的格式也可以写成这样: 代码如下 复制代码 {“

(转)JQuery处理json与ajax返回JSON实例

son数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法. 一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内部各个数据之间通过“,”分割,如[“AreaId”:”123”,”AreaId”:”345”]. 很多情况下是对象数组,那就是这样:  代码如下 复

jquery ajax jsonp跨域调用实例代码

今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApp.WebForm1" %><!DOCTYPE html P

ThinkPHP JQuery Ajax 的实现实例

ThinkPHP JQuery Ajax ThinkPHP 框架和客户端是完全分离的,没有任何的依赖,而服务端返回 ajaxReturn 方法也是通用的.在<ThinkPHP Ajax 使用详解及实例>一文中,讲述的是 ThinkAjax 类库结合 prototyep 和 mootools 来实现的 Ajax .事实上可以使用任何 Js 类库来实现 ThinkPHP Ajax ,本文就以 JQuery 来实现<ThinkPHP Ajax 使用详解及实例>一文中同样的功能. Js 类

Jquery通过Ajax方式来提交Form表单简单实例

因工作中有时会用到ajax,但一般也都写成函数的形式了,再写底层时还要去查资料,这里小记一下ajax的小实例以后不用经常去查了 $.ajax({ type:"POST", url: "要提交的地址", data:{"para":1,"para1":2,...}, dataType:"json",/*要提交的类型*/ success:function(val){/*返回值可以是数组,val['name']*/

ASP.NET 与 Ajax 的实现方式

Ajax 应该不是一项技术,是一种思想而已,跟 ASP.NET 以及其它 Web 开发语言没有什么太大关系,这里只是谈谈 ASP.NET 中目前使用的 Ajax 技术以及其它一些实现 Ajax 的优秀框架. Ajax 已经很流行一阵子了,现在谈 Ajax 觉得有点老土,-_____-```.目前所谓的 Web2.0 网站,基本上没有不使用 Ajax 的,就如使用 RSS 一样,就如同一个标签,贴上去就成了 2.0.Ajax 具体细节不谈,其目的就是让用户触发一些操作的时候,页面不会全部刷新,只刷