当前位置:首页 > 安卓游戏 > 休闲益智 > 正文
asp.net下载?asp.net web开发框架 休闲益智

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.net下载?asp.net web开发框架

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开发框架的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

版权说明:如非注明,本站文章均为 皮努努下载 原创,转载请注明出处和附带本文链接;

本文地址:https://www.pinunu.com/xxyz/aspnetxzasp.html