最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實(shí)現(xiàn)ASP.NET無刷新下載并提示下載完成的開發(fā)思路

 更新時(shí)間:2015年10月12日 14:21:45   投稿:mrr  
這篇文章主要介紹了實(shí)現(xiàn)ASP.NET無刷新下載并提示下載完成的開發(fā)思路的相關(guān)資料,需要的朋友可以參考下

先給大家貼代碼了,后面給大家在做具體的文字說明。

以下是前端代碼:

<%@ 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>

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

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

以下是服務(wù)器端代碼:

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") //判斷是否為獲取下載結(jié)果的請求
        {
          string result = (Cache[cacheKey] ?? "N").ToString();
          Response.Clear();
          Response.Write(result);
          if(result=="Y") //如果查詢到下載完成,則應(yīng)清除標(biāo)記下載完成的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");//輸出所有文件數(shù)據(jù)后,添加CACHE,并設(shè)置downloadcompleted=Y,供頁面查詢結(jié)果使用
        Response.End();
      }
    }
  }
}

實(shí)現(xiàn)原理:前端通過動(dòng)態(tài)創(chuàng)建FORM用來請求下載的資源,請求參數(shù)中必需包含一個(gè)downId(我這里還包含了一個(gè)要下載的文件名),這個(gè)是與服務(wù)器端的cache Key相對應(yīng)的,服務(wù)器端接收到下載請求后,會(huì)獲取下載的文件名及downId,然后依據(jù)downId生成一個(gè)相對應(yīng)的cache Key用于標(biāo)識下載結(jié)果,再依據(jù)下載文件名獲取服務(wù)器的文件資源并響應(yīng)輸出文件流供客戶端下載,輸出完畢后,生成一個(gè)Cache,并標(biāo)記為Y,表明已輸出完畢。客戶端在下載文件的同時(shí),會(huì)每隔3秒請求服務(wù)器獲取下載完成的Cache標(biāo)識,若獲取到其值為Y,則表明下載完成,服務(wù)器立即清除該Cache,客戶端作出相應(yīng)的響應(yīng)(比如:關(guān)閉提示下載的對話框及彈出下載完成的對話框)

效果如下:

 

經(jīng)過多個(gè)不同的瀏覽器及大文件壓力測試,兼容性良好,都能正常下載并能收到下載完成提示,基于以上原理,可以實(shí)現(xiàn)進(jìn)度條顯示,實(shí)現(xiàn)原理簡述:客戶端請求服務(wù)器下載資源-->服務(wù)器響應(yīng)并按字節(jié)分段依次輸出,每次輸出時(shí)生成CACHE,并保存輸出進(jìn)度,直至全部輸出完畢,客戶端在請求服務(wù)器下載資源的同時(shí),也需要同時(shí)每隔幾秒請求查詢服務(wù)器下載進(jìn)度,直至下載進(jìn)度為100%停止請求。也可利用HTML5新特性WEBSOCKET技術(shù)來實(shí)現(xiàn)。

相關(guān)文章

  • 詳解WPF如何動(dòng)態(tài)生成DataGrid的行和列

    詳解WPF如何動(dòng)態(tài)生成DataGrid的行和列

    在日常開發(fā)中,DataGrid作為二維表格,非常適合數(shù)據(jù)的展示和統(tǒng)計(jì),本文以一些簡單的小例子,簡述在WPF開發(fā)中,如何動(dòng)態(tài)生成DataGrid的行和列,需要的可以了解下
    2024-02-02
  • C#短消息提示窗口位置及窗口大小詳解

    C#短消息提示窗口位置及窗口大小詳解

    在我們的生活中無論是使用QQ,360安全衛(wèi)士等軟件的過程中,經(jīng)常會(huì)遇到從右下方的托盤處彈出一個(gè)消息提示窗,比如新聞,產(chǎn)品更新等內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于C#短消息提示窗口位置及窗口大小的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C#中Task.Yield的用途深入講解

    C#中Task.Yield的用途深入講解

    這篇文章主要給大家介紹了關(guān)于C#中Task.Yield的用途的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C#類的創(chuàng)建與初始化實(shí)例解析

    C#類的創(chuàng)建與初始化實(shí)例解析

    這篇文章主要介紹了C#類的創(chuàng)建與初始化實(shí)例解析,有助于初學(xué)者較為直觀的理解C#的類,需要的朋友可以參考下
    2014-07-07
  • C#利用TreeView控件實(shí)現(xiàn)目錄跳轉(zhuǎn)

    C#利用TreeView控件實(shí)現(xiàn)目錄跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了C#潤滑利用TreeView控件實(shí)現(xiàn)目錄跳轉(zhuǎn)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-07-07
  • 快速解決owin返回json字符串多帶了雙引號

    快速解決owin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串

    下面小編就為大家?guī)硪黄焖俳鉀Qowin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 淺析C#中文件路徑的操作

    淺析C#中文件路徑的操作

    在.NET類庫中,有一個(gè)專門的功能類System.IO.Path,對表示文件或在目錄路徑的string進(jìn)行操作。本文介紹下利用Path來對文件路徑進(jìn)行的一些經(jīng)常用操作。感興趣的朋友可以看下
    2016-12-12
  • C# Winform程序?qū)崿F(xiàn)防止多開的方法總結(jié)【親測】

    C# Winform程序?qū)崿F(xiàn)防止多開的方法總結(jié)【親測】

    這篇文章主要介紹了C# Winform程序?qū)崿F(xiàn)防止多開的方法,結(jié)合實(shí)例形式總結(jié)分析了C# Winform防止多開相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • 淺析C#如何在自定義事件里傳遞數(shù)據(jù)

    淺析C#如何在自定義事件里傳遞數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了C#在自定義事件里傳遞數(shù)據(jù)的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-12-12
  • C#編程實(shí)現(xiàn)Excel文檔中搜索文本內(nèi)容的方法及思路

    C#編程實(shí)現(xiàn)Excel文檔中搜索文本內(nèi)容的方法及思路

    有了在Word文檔中編程實(shí)現(xiàn)搜索文本的經(jīng)驗(yàn),在Excel中實(shí)現(xiàn)這個(gè)功能也并非難事。
    2013-07-07

最新評論

清徐县| 五大连池市| 三门县| 龙江县| 东丰县| 镇原县| 巩留县| 盈江县| 宁海县| 托克托县| 周宁县| 陵水| 平武县| 贵南县| 枞阳县| 绍兴市| 苍山县| 洛浦县| 英德市| 威信县| 高邮市| 姜堰市| 通江县| 湖南省| 象山县| 广东省| 兰西县| 化德县| 孟津县| 五常市| 瑞昌市| 玉门市| 九台市| 岳阳县| 卓尼县| 隆回县| 武陟县| 木兰县| 广安市| 金乡县| 五莲县|