国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 實現ASP.NET無刷新下載并提示下載完成的開發思路

實現ASP.NET無刷新下載并提示下載完成的開發思路

2021-10-29 12:27ASP.NET教程網 ASP.NET教程

這篇文章主要介紹了實現ASP.NET無刷新下載并提示下載完成的開發思路的相關資料,需要的朋友可以參考下

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

以下是前端代碼:

?
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
29
30
31
32
33
34
35
36
37
<%@ 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" />

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

以下是服務器端代碼:

?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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();
      }
    }
  }
}

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

效果如下:

 實現ASP.NET無刷新下載并提示下載完成的開發思路

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩中文在线视频 | 欧美精品成人一区二区三区四区 | 国产精品毛片久久久久久久 | 久久久91精品国产一区二区三区 | 日本福利视频 | 日韩字幕在线 | 91免费在线视频 | 一本色道久久综合狠狠躁的推荐 | 国产精品1区2区 | 九九热1 | 超碰8 | 亚洲一区二区三区四区的 | 精品视频在线观看 | 亚洲视频中文字幕 | 国产精品免费看 | 久久精品在线 | 日日操日日操 | 欧美一区二区三区在线看 | 欧洲亚洲精品久久久久 | 日韩一二区 | 久草福利在线视频 | 在线视频中文字幕 | 欧美精品一区二区三区四区在线 | 久久综合久久久 | 免费精品人在线二线三线区别 | 国产精品视频久久久 | 国产不卡免费视频 | 国产h片在线观看 | 亚洲啊v | 欧美一区二区三区在线 | 亚洲视频天堂 | 欧美一级视频在线观看 | 国产精品亲子伦av一区二区三区 | 久色成人 | 最近韩国日本免费高清观看 | 三级黄色片在线免费观看 | 欧美一级电影在线 | 韩日精品视频 | 日韩高清国产一区在线 | 精品国产乱码久久久久久1区2区 | 色精品 |