• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 实现ASP.NET无刷新下载并提示下载完成的开发思路

实现ASP.NET无刷新下载并提示下载完成的开发思路

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了asp实现文件下载,asp实现页面跳转,asp实现登录,asp实现用户注册,asp 自动采集实现代码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

先给大家贴代码了,后面给大家在做具体的文字说明。

以下是前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
  <script src="Scripts/jquery-1.8.2.js"></script>
  <script type="text/javascript">
    $(function () {
      $("#btnDownLoad").on("click", function () {
        var $loading = $("#loadingbox");
        var downId = new Date().getTime() + "-" + Math.random();
        $loading.css("display", "block");
        DownLoad($("#downfile").val(), downId);
        var tid=setInterval(function () {
          $.post("WebForm2.aspx", { getresult: "Y", downid: downId }, function (result) {
            //document.writeln("result:" + result);
            if(result=="Y")
            {
              clearInterval(tid);
              $loading.css("display", "none");
              alert("下载完成!");
            }
          });
        }, 3000);
      });
      function DownLoad(filename,downid) {
        var $form = $("<form target='' method='post' action='WebForm2.aspx'></form>");
        $form.append("<input type='hidden' name='filename' value='" + filename + "'>");
        $form.append("<input type='hidden' name='downid' value='" + downid + "'>");
        $('body').append($form);
        $form.submit();
      }
    });
  </script>
</head>
<body>
</div>

    要下载的文件名:<input type="text" id="downfile" />

 <input type="button" id="btnDownLoad" value="无刷新下载文件" />
  <div id="loadingbox" style="display:none;">
    正加下载中,请稍候。。。
  </div>
</body>
</html>
</div>

以下是服务器端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace WebApplication1
{
  public partial class WebForm2 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (Request.HttpMethod == "POST")
      {
        string getresult = Request.Form["getresult"];
        string downId=Request.Form["downid"];
        string cacheKey =string.Format("downloadcompleted-{0}-{1}",downId,Request.UserHostAddress);
        if (getresult == "Y") //判断是否为获取下载结果的请求
        {
          string result = (Cache[cacheKey] ?? "N").ToString();
          Response.Clear();
          Response.Write(result);
          if(result=="Y") //如果查询到下载完成,则应清除标记下载完成的CACHE
          {
            Cache.Remove(cacheKey);
          }
          Response.End();
          return;
        }
        string fileName = Request.Form["filename"];
        string localFilePath = Server.MapPath("~/" + fileName);
        System.IO.FileInfo file = new System.IO.FileInfo(localFilePath);
        Response.Clear();
        Response.ClearHeaders();
        Response.Buffer = false;
        Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.WriteFile(file.FullName);
        Response.Flush();
        Cache.Insert(cacheKey, "Y");//输出所有文件数据后,添加CACHE,并设置downloadcompleted=Y,供页面查询结果使用
        Response.End();
      }
    }
  }
}
</div>

实现原理:前端通过动态创建FORM用来请求下载的资源,请求参数中必需包含一个downId(我这里还包含了一个要下载的文件名),这个是与服务器端的cache Key相对应的,服务器端接收到下载请求后,会获取下载的文件名及downId,然后依据downId生成一个相对应的cache Key用于标识下载结果,再依据下载文件名获取服务器的文件资源并响应输出文件流供客户端下载,输出完毕后,生成一个Cache,并标记为Y,表明已输出完毕。客户端在下载文件的同时,会每隔3秒请求服务器获取下载完成的Cache标识,若获取到其值为Y,则表明下载完成,服务器立即清除该Cache,客户端作出相应的响应(比如:关闭提示下载的对话框及弹出下载完成的对话框)

效果如下:

 

经过多个不同的浏览器及大文件压力测试,兼容性良好,都能正常下载并能收到下载完成提示,基于以上原理,可以实现进度条显示,实现原理简述:客户端请求服务器下载资源-->服务器响应并按字节分段依次输出,每次输出时生成CACHE,并保存输出进度,直至全部输出完毕,客户端在请求服务器下载资源的同时,也需要同时每隔几秒请求查询服务器下载进度,直至下载进度为100%停止请求。也可利用HTML5新特性WEBSOCKET技术来实现。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 实现ASP.NET无刷新下载并提示下载完成的开发思路

相关文章

  • 2017-05-28c#不使用windows api函数打开我的电脑和获取电脑驱动器信息
  • 2017-05-28基于C#技术实现身份证识别功能
  • 2017-05-28Winform基于多线程实现每隔1分钟执行一段代码
  • 2017-05-28HTML文本框的值改变后触发后台代码的方法
  • 2017-05-28深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
  • 2017-05-28C#实现托盘程序并禁止多个应用实例运行的方法
  • 2017-05-28C#程序中创建、复制、移动、删除文件或文件夹的示例
  • 2017-05-28C#实现写入文本文件内容的方法
  • 2017-05-28C#中Equality和Identity浅析
  • 2017-05-28C#基于面向过程计算加权平均分的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • .NET中的Timer类型用法详解
    • C#中的静态成员、静态方法、静态类介绍
    • C#影院售票系统毕业设计(4)
    • mvc开启gzip压缩示例分享
    • C# 如何判断两个文件内容是否相同的方法
    • C#中Monitor对象与Lock关键字的区别分析
    • C# 泛型的约束
    • 基于C# 中可以new一个接口?的问题分析
    • 简单的excel导入导出示例分享
    • C#难点逐个击破(5):类的访问类型

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有