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

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

考虑可以使用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。

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

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

  1. jquery的几种ajax方式对比

    jquery的几种ajax方式对比 jquery的ajax方式有如下几种: 1.   $.post(url,params,callback); 2.   $.getJSON(url,params,ca ...

  2. JQuery 获取json数据$.getJSON方法的实例代码

    这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...

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

    1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服 ...

  4. JQuery处理json与ajax返回JSON实例

    一.JSON的一些基础知识. JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value). “[]”,标识数组,数组内 ...

  5. [Javascript,JSON] JQuery处理json与ajax返回JSON实例

    转自:http://www.php100.com/html/program/jquery/2013/0905/5912.html [导读] json数据是一种经型的实时数据交互的数据存储方法,使用到最 ...

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

    son数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法. 一.JSON的一些基础知识. JSON中对象通过 ...

  7. asp.net 通过ajax方式调用webmethod方法使用自定义类传参及获取返回参数

    实体类    public class User    {        public int Id { get; set; }        public string Name { get; se ...

  8. Ajax 简单的实例代码

    <!DOCTYPE HTML><html><head><script src="http://libs.baidu.com/jquery/2.0.0 ...

  9. jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...

随机推荐

  1. Java设计模式学习记录-装饰模式

    前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...

  2. [EZOJ1007] 神奇的三角形

    Description 求 \(\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{i}C(i,j)\times (j+1)^m\operatorname{mod}99 ...

  3. css布局------上下高度固定,中间高度自适应容器

    HTML <body> <div class="container"> <div class="header"></d ...

  4. Java并发编程:JMM (Java内存模型) 以及与volatile关键字详解

    目录 计算机系统的一致性 Java内存模型 内存模型的3个重要特征 原子性 可见性 有序性 指令重排序 volatile关键字 保证可见性和防止指令重排 不能保证原子性 计算机系统的一致性 在现代计算 ...

  5. 深入理解Java虚拟机--阅读笔记三

    垃圾收集器 手机算法是内存回收的方法论,垃圾收集器是内存回收的具体实现. 并行:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发:值用户线程与垃圾收集线程同时执行(但并不一定是并行的) ...

  6. webpack4 系列教程(十): 图片处理汇总

    多图预警!!! 此篇博文共 5 张图(托管在 GitHub),国内用户请移步>>>原文. 或者来我的小站哦 0. 课程源码和资料 本次课程的代码目录(如下图所示): >> ...

  7. JQuery的事件委托;jQuery注册事件;jQuery事件解绑

    一.事件 ①事件委托:就是给子元素的父元素或者祖先元素注册一个事件,但是事件的执行者是子元素,委托事件的好处是能够给动态创建出来时元素也加上事件. ②简单事件:就是给自己注册事件自己执行动态创建出来的 ...

  8. blfs(systemv版本)学习笔记-前几章节的脚本配置

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 记录blfs书籍前几个章节的配置内容. bash shell启动文件章节 1.切换root用户 su 2.创建/etc/prof ...

  9. c语言学习笔记-switch

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.switch函数意义 选择性执行 二.switch函数结构 switch(表达式) { case: 常量表达式; 语句1; ...

  10. 《.NET之美》之程序集

    一.什么是程序集(Assembly)? 经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为·dll或者是·exe的格式,但是要注意,它们跟普通意义上的WI ...