ASP.NET 무 리 셋 다운 로드 를 실현 하고 다운로드 가 완 료 된 개발 방향 을 제시 합 니 다.
다음은 전단 코드:
<%@ 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="button" id="btnDownLoad" value=" " />
<div id="loadingbox" style="display:none;">
, 。。。
</div>
</body>
</html>
다음은 서버 쪽 코드 입 니 다.
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 를 즉시 제거 하고 클 라 이언 트 는 해당 하 는 응답 을 합 니 다(예 를 들 어 다운로드 알림 대화 상자 와 팝 업 다운로드 가 완 료 된 대화 상 자 를 닫 습 니 다)효 과 는 다음 과 같 습 니 다:
여러 개의 서로 다른 브 라 우 저 와 큰 파일 압력 테스트 를 통 해 호환성 이 좋 고 정상적으로 다운로드 할 수 있 으 며 다운로드 완료 알림 을 받 을 수 있 습 니 다.상기 원 리 를 바탕 으로 진도 표시 를 실현 할 수 있 습 니 다.원 리 를 약술 할 수 있 습 니 다.클 라 이언 트 가 서버 에 자원 을 다운로드 하 라 고 요청 하고 서버 응답 에 따라 바이트 별로 순서대로 출력 합 니 다.출력 할 때마다 CACHE 를 생 성하 고 출력 진 도 를 저장 합 니 다.모든 출력 이 끝 날 때 까지 클 라 이언 트 는 서버 에 자원 다운 로드 를 요청 하 는 동시에 몇 초 마다 서버 다운로드 진 도 를 조회 하고 다운로드 진도 가 100%정지 될 때 까지 요청 해 야 합 니 다.HTML 5 의 새로운 특성 인 WEBSOCKET 기술 을 이용 하여 도 가능 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
부트스트랩 ASP.NET에서 설정하는 법1) _Layout.cshtml 內 link로 bootstrap 참조 2) Nuget 패키지에서 BootStrap 다운로드 3) 하단 부트스트랩 예제 사이트 참고해서 프로젝트 개발 참고 :...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.