-
休闲益智
-
asp.net下载?asp.net web开发框架
11个月前 (10-31) 类别:休闲益智
- 发布日期:2025-09-19 01:12:27
- 所属类别:休闲益智
- 下载人数:5755
- 版本:
- 大小:
-
扫二维码手机浏览
asp.net下载?asp.net web开发框架介绍
如何在ASP.NET中下载文件
但是这样的下载有几个问题: 1.无法下载不存在的文件:例如,我们若是想把程序动态(临时)产生的文字,当作一个文件下载的时候(也就是该文件其实原先并不是真的存在,而是动态产生的),就无法下载。 2.无法下载存储于数据库中的文件:这是类似的问题,该文件并没有真的存在,只是被存放在数据库中的某个位置(某笔记录中的某个栏位)的时候,就无法下载。 3.无法下载不存在于Web文件夹中的文件:文件确实存在,但该文件夹并不是可以分享出来的Web文件夹,例如,该文件的位置在C:/winnt,您总不会想要把该文件夹当作Web文件夹吧?这时候,由于您无法使用Redirect指向该位置,所以无法下载。 4.下载文件后,原本的页面将会消失。 1.这个文件可能是通过ASP.NET程序动态产生的,而不是确实存在于Server端的文件; 2.或是它虽然存在于伺服器端的某个实**置,但我们并不想暴露这个位置(如果这个位置公开,很可能没有权限的用户也可以在网址栏上输入URL直接取得!!!) 3.或是这个位置并不在网站虚拟路径所在的文件夹中。(例如C:/Windows/System32...)这时候,我们就得采用不同的方式: Shared Function DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FileBody As String)WebForm.Response.ClearHeaders() WebForm.Response.Clear() WebForm.Response.Expires= 0 WebForm.Response.Buffer= True WebForm.Response.AddHeader(Accept-Language, zh-tw)'文件名称WebForm.Response.AddHeader(content-disposition, attachment; filename=& Chr(34)& System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8)& Chr(34)) WebForm.Response.ContentType= Application/octet-stream'文件内容WebForm.Response.Write(FileBody)WebForm.Response.End() End Function上面这段代码是下载一个动态产生的文本文件,若这个文件已经存在于服务器端的实体路径,则可以通过下面的函数: Shared Sub DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FilePath As String)WebForm.Response.ClearHeaders() WebForm.Response.Clear() WebForm.Response.Expires= 0 WebForm.Response.Buffer= True WebForm.Response.AddHeader(Accept-Language, zh-tw)'文件名称WebForm.Response.AddHeader(content-disposition, attachment; filename=& Chr(34)& System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8)& Chr(34))
一个关于asp.net(c#)下载文件的问题
文件路径是不是有中文啊?zh-tw这是繁体的!
asp.net2.0以后,我们有了很多种文件下载的选择。
public partial class FileDownLoad: System.Web.UI.Page
{
//提供下载的文件,不编码的话文件名会乱码
private string fileName= HttpContext.Current.Server.UrlEncode("规范.rar");
private string filePath= HttpContext.Current.Server.MapPath("规范.rar");
//使用Tran**ifFile下载文件
protected void btnDL1_Click(object sender, EventArgs e)
{
FileInfo info= new FileInfo(filePath);
long fileSize= info.Length;
Response.Clear();
Response.ContentType="application/x-zip-compressed";
Response.AddHeader("Content-Disposition","attachment;filename="+ fileName);
//不指明Content-Length用Flush的话不会显示下载进度
Response.AddHeader("Content-Length", fileSize.ToString());
Response.Tran**itFile(filePath, 0, fileSize);
Response.Flush();
Response.Close();
}
//使用WriteFile下载文件
protected void btnDL2_Click(object sender, EventArgs e)
{
FileInfo info= new FileInfo(filePath);
long fileSize= info.Length;
Response.Clear();
Response.ContentType="application/octet-stream";
Response.AddHeader("Content-Disposition","attachement;filename="+ fileName);
//指定文件大小
Response.AddHeader("Content-Length", fileSize.ToString());
Response.WriteFile(filePath, 0, fileSize);
Response.Flush();
Response.Close();
}
//使用OutputStream.Write分块下载文件
protected void btnDL3_Click(object sender, EventArgs e)
{
//指定块大小
long chunkSize= 102400;
//建立一个100K的缓冲区
byte[] buffer= new byte[chunkSize];
//已读的字节数
long dataToRead= 0;
FileStream stream= null;
try
{
//打开文件
stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
dataToRead= stream.Length;
//添加Http头
Response.ContentType="application/octet-stream";
Response.AddHeader("Content-Disposition","attachement;filename="+ fileName);
Response.AddHeader("Content-Length", dataToRead.ToString());
while(dataToRead> 0)
{
if(Response.IsClientConnected)
{
int length= stream.Read(buffer, 0, Convert.ToInt32(chunkSize));
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
Response.Clear();
dataToRead-= length;
}
else
{
//防止client失去连接
dataToRead=-1;
}
}
}
catch(Exception ex)
{
Response.Write("Error:"+ ex.Message);
}
finally
{
if(stream!= null)
{
stream.Close();
}
Response.Close();
}
}
//使用BinaryWrite下载文件,大文件效率不行
protected void btnDL4_Click(object sender, EventArgs e)
{
FileStream stream= null;
try
{
//读文件,大文件一次读入会占用大量内存
stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] bytes= new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Close();
//添加Http头
Response.ContentType="application/octet-stream";
Response.AddHeader("Content-Disposition","attachement;filename="+ fileName);
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.BinaryWrite(bytes);
Response.Flush();
}
catch(Exception ex)
{
Response.Write("Error:"+ ex.Message);
}
finally
{
if(stream!= null)
{
stream.Close();
}
Response.Close();
}
}
//使用BinaryWrite分块下载文件
protected void btnDL5_Click(object sender, EventArgs e)
{
//指定区块和缓冲区
long chunkSize= 102400;
byte[] buffer= new byte[chunkSize];
FileStream stream= null;
long dataToRead= 0;
try
{
stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
dataToRead= stream.Length;
//添加Http头
Response.ContentType="application/octet-stream";
Response.AddHeader("Content-Disposition","attachement;filename="+ fileName);
Response.AddHeader("Content-Length", dataToRead.ToString());
while(dataToRead> 0)
{
if(Response.IsClientConnected)
{
int length= stream.Read(buffer, 0, Convert.ToInt32(chunkSize));
Response.BinaryWrite(buffer);
Response.Flush();
Response.Clear();
dataToRead-= length;
}
else
{
dataToRead=-1;
}
}
}
catch(Exception ex)
{
Response.Write("Error:"+ ex.Message);
}
finally
{
if(stream!= null)
{
stream.Close();
}
Response.Close();
}
}
}
public partial class FileDownLoad: System.Web.UI.Page{//提供下载的文件,不编码的话文件名会乱码 private string fileName= HttpContext.Current.Server.UrlEncode("规范.rar"); private string filePath= HttpContext.Current.Server.MapPath("规范.rar");//使用Tran**ifFile下载文件 protected void btnDL1_Click(object sender, EventArgs e){ FileInfo info= new FileInfo(filePath); long fileSize= info.Length; Response.Clear(); Response.ContentType="application/x-zip-compressed"; Response.AddHeader("Content-Disposition","attachment;filename="+ fileName);//不指明Content-Length用Flush的话不会显示下载进度 Response.AddHeader("Content-Length", fileSize.ToString()); Response.Tran**itFile(filePath, 0, fileSize); Response.Flush(); Response.Close();}//使用WriteFile下载文件 protected void btnDL2_Click(object sender, EventArgs e){ FileInfo info= new FileInfo(filePath); long fileSize= info.Length; Response.Clear(); Response.ContentType="application/octet-stream"; Response.AddHeader("Content-Disposition","attachement;filename="+ fileName);//指定文件大小 Response.AddHeader("Content-Length", fileSize.ToString()); Response.WriteFile(filePath, 0, fileSize); Response.Flush(); Response.Close();}//使用OutputStream.Write分块下载文件 protected void btnDL3_Click(object sender, EventArgs e){//指定块大小 long chunkSize= 102400;//建立一个100K的缓冲区 byte[] buffer= new byte[chunkSize];//已读的字节数 long dataToRead= 0; FileStream stream= null; try{//打开文件 stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); dataToRead= stream.Length;//添加Http头 Response.ContentType="application/octet-stream"; Response.AddHeader("Content-Disposition","attachement;filename="+ fileName); Response.AddHeader("Content-Length", dataToRead.ToString()); while(dataToRead> 0){ if(Response.IsClientConnected){ int length= stream.Read(buffer, 0, Convert.ToInt32(chunkSize)); Response.OutputStream.Write(buffer, 0, length); Response.Flush(); Response.Clear(); dataToRead-= length;} else{//防止client失去连接 dataToRead=-1;}}} catch(Exception ex){ Response.Write("Error:"+ ex.Message);} finally{ if(stream!= null){ stream.Close();} Response.Close();}}//使用BinaryWrite下载文件,大文件效率不行 protected void btnDL4_Click(object sender, EventArgs e){ FileStream stream= null; try{//读文件,大文件一次读入会占用大量内存 stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] bytes= new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); stream.Close();//添加Http头 Response.ContentType="application/octet-stream"; Response.AddHeader("Content-Disposition","attachement;filename="+ fileName); Response.AddHeader("Content-Length", bytes.Length.ToString()); Response.BinaryWrite(bytes); Response.Flush();} catch(Exception ex){ Response.Write("Error:"+ ex.Message);} finally{ if(stream!= null){ stream.Close();} Response.Close();}}//使用BinaryWrite分块下载文件 protected void btnDL5_Click(object sender, EventArgs e){//指定区块和缓冲区 long chunkSize= 102400; byte[] buffer= new byte[chunkSize]; FileStream stream= null; long dataToRead= 0; try{ stream= new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); dataToRead= stream.Length;//添加Http头 Response.ContentType="application/octet-stream"; Response.AddHeader("Content-Disposition","attachement;filename="+ fileName); Response.AddHeader("Content-Length", dataToRead.ToString()); while(dataToRead> 0){ if(Response.IsClientConnected){ int length= stream.Read(buffer, 0, Convert.ToInt32(chunkSize)); Response.BinaryWrite(buffer); Response.Flush(); Response.Clear(); dataToRead-= length;} else{ dataToRead=-1;}}} catch(Exception ex){ Response.Write("Error:"+ ex.Message);} finally{ if(stream!= null){ stream.Close();} Response.Close();}}}
以上除了第四种不推荐以外,其他的都可以,但是个人感觉分块下载的要好一点。没有仔细测试,所以可能有问题。
注意:对于中文文件名要编码才能正确显示。对于长中文文件名(UTF8编码后大于153字节的中文)即使编码了,还是有问题的,大家可以参考这个链接。
asp.net中如何写下载代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.IO;
public partial class _Default: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DownloadClass dd= new DownloadClass();
dd.StrUrl="";
dd.StrFileName="C:\\1.rar";
dd.DownloadFile();
Response.Write(dd.strError);
}
//测试用线程1断点续传下载网络上的文件到本地电脑
public class DownloadClass
{
public string StrUrl;//文件下载网址
public string StrFileName;//下载文件保存地址
public string strError;//返回结果
public long lStartPos= 0;//返回上次下载字节
public long lCurrentPos= 0;//返回当前下载字节
public long lDownloadFile;//返回当前下载文件长度
public void DownloadFile()
{
System.IO.FileStream fs;
if(System.IO.File.Exists(StrFileName))
{
fs= System.IO.File.OpenWrite(StrFileName);
lStartPos= fs.Length;
fs.Seek(lStartPos, System.IO.SeekOrigin.Current);
//移动文件流中的当前指针
}
else
{
fs= new System.IO.FileStream(StrFileName, System.IO.FileMode.Create);
lStartPos= 0;
}
//打开网络连接
try
{
System.Net.HttpWebRequest request=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
long length= request.GetResponse().ContentLength;
lDownloadFile= length;
if(lStartPos> 0)
request.AddRange((int)lStartPos);//设置Range值
//向服务器请求,获得服务器回应数据流
System.IO.Stream ns= request.GetResponse().GetResponseStream();
byte[] nbytes= new byte[512];
int nReadSize= 0;
nReadSize= ns.Read(nbytes, 0, 512);
while(nReadSize> 0)
{
fs.Write(nbytes, 0, nReadSize);
nReadSize= ns.Read(nbytes, 0, 512);
lCurrentPos= fs.Length;
}
fs.Close();
ns.Close();
strError="下载完成";
}
catch(Exception ex)
{
fs.Close();
strError="下载过程中出现错误:"+ ex.ToString();
}
}
}
}
asp.net下载和asp.net web开发框架的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
版权说明:如非注明,本站文章均为 皮努努下载 原创,转载请注明出处和附带本文链接;
相关推荐
相关资讯
- 排行榜
-
1
自罚隐私越疼的方法 自罚最痛的方法但不会让自己受伤
类别:智能硬件
-
2
[长弓燧龙]芭芭拉(原神) 长弓燧龙 芭芭拉 star!dus
类别:智能硬件
-
3
王者荣耀女生去掉所有服装(王者荣耀如何女生皮肤去掉小内皮肤)
类别:商务办公
-
4
excel免费下载?excel免费版永久使用
类别:主题美化
-
5
女生去掉所有服装小内()
类别:图像拍照
-
6
原神女角色去掉所有服装(大欧派晃来晃去的八重神子)
类别:影音播放
-
7
xp密钥,windowsxp专业版产品密钥
类别:主题美化
-
8
原神胡桃被空C出液体()
类别:交通出行
-
9
100款禁止安装的软件,手机里千万不能装的软件有哪些
类别:学习教育
- 游戏资讯