代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Asp.Net
】
文件下载
作者:
Dezai.CN
/ 发布于
2013/7/30
/
702
在你的Page_Load中添加这样的代码: Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000); if (!success) Response.Write("下载文件出错!"); Page.Response.End(); 文件下载函数代码为: public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed) { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; double pack = 10240; //10K bytes //int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] {'=', '-'}); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); if (startBytes != 0) { //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) ); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString()))); Thread.Sleep(sleep); } else { i=maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; } 这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口. 防止盗链 protected void Page_Load(object sender, EventArgs e) { /*--------------------------------------------------------------*\ * 大文件下载,防盗链 * * * * tda7264@163.com * * * * 飘遥的BLOG http://xianfen.net * \* -------------------------------------------------------------*/ if (Request.QueryString["FileName"] == null) { InvalidRedirect(); } string fileName = Request.QueryString["FileName"]; if (fileName == string.Empty) { InvalidRedirect(); } //判断配置文件是否直接下载 string downDirect = ConfigurationManager.AppSettings["Down"].ToLower(); if (downDirect == "true") { UpdateHits(fileName);//更新下载次数 Response.Redirect("Upload/" + fileName); return; } string path = Server.MapPath(Request.ApplicationPath + "/Upload/" + fileName); string referrer = string.Empty; if (Request.UrlReferrer != null) { referrer = Request.UrlReferrer.ToString().ToLower(); } string d = ConfigurationManager.AppSettings["Valid"].ToLower(); string[] domainName = ConfigurationManager.AppSettings["Refers"].ToLower().Split(new char[] { ',' }); // 如果设置为防止盗链,判断访问来源是否合法 if (d == "false") { foreach (string s in domainName) { if (referrer.IndexOf(s.ToLower()) > 0) { UpdateHits(fileName);//更新下载次数 ResponseFile(path); return; } } InvalidRedirect(); } else { ResponseFile(path); } } protected void UpdateHits(string fileName) { //更新文件下载次数的代码 } protected void InvalidRedirect() { string defaultPage = ConfigurationManager.AppSettings["DefaultRedirect"]; Response.Redirect(defaultPage, true); } 配置文件 配置文件中配置下载方式、盗链功能是否开启及盗链默认转向的页面地址: <appSettings> <add key="Down" value="false"/> <!--是否直接下载--> <add key="Valid" value="false"/> <!--是否允许盗链--> <add key="Refers" value="localhost,google.cn"/> <!--多个允许的访问来源用半角的","分割--> <add key="DefaultRedirect" value="Error.htm"/> <!--默认转向的页面--> </appSettings>
试试其它关键字
文件下载
同语言下
.
gzip压缩
.
实现http多线程断点续传下载文件
.
实现多线程断点续传下载大文件
.
生成字符串的 CheckSum
.
根据 UserAgent 获取浏览器的类型和版本
.
根据 Agent 判断是否是智能手机
.
隐藏手机号中间四位为*方法
.
合并图片(二维码和其他图片合并)
.
ASP.NET CORE中判断是否移动端打开网页
.
ASP.NET(C#)实现页面计时(定时)自动跳转
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3