求从web服务器下载超大文件到客户机的解决办法!

greymouseyu 2010-01-03 04:33:34
我做了一个.NET的网站,在web服务器上某个文件夹下存放着大量的数据文件,每个文件都高达好几个G。
因为业务需求,现用户需要通过浏览器下载这个文件夹下指定的文件,请问有何办法?

我试过了HTTP,可是有瓶颈限制(最大2G)
还试了把包含数据文件的文件夹发布成FTP,然后用FTP下载。但是这样只能把文件从这个文件夹下载到web服务器上的另一个文件夹,还是下载不到客户端。

有没有高手做过这种web方面的超大文件下载的,请指教下。
...全文
464 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
newdigitime 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 greymouseyu 的回复:]
引用 9 楼 newdigitime 的回复:
你在IIS及webconfig中,将允许传输的最大数据量以及连接时间设成多少了?有没有修改?
用默认设置肯定不够.


在IIS和webconfig中都要修改吗?
请问如何修改呢?
[/Quote]

这个网上资料太多了.你随便搜索一下.
IIS与webconfig最好都改
antony1029 2010-01-04
  • 打赏
  • 举报
回复
学习!呵呵
greymouseyu 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 newdigitime 的回复:]
你在IIS及webconfig中,将允许传输的最大数据量以及连接时间设成多少了?有没有修改?
用默认设置肯定不够.
[/Quote]

在IIS和webconfig中都要修改吗?
请问如何修改呢?
happyboyxq1985 2010-01-04
  • 打赏
  • 举报
回复
路过学习
newdigitime 2010-01-03
  • 打赏
  • 举报
回复
你在IIS及webconfig中,将允许传输的最大数据量以及连接时间设成多少了?有没有修改?
用默认设置肯定不够.
bwangel 2010-01-03
  • 打赏
  • 举报
回复
可能是你的服务器超时时间设置得太短所至.
greymouseyu 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyq11 的回复:]
断点上传和下载
[/Quote]

按照2#的断点续传的代码,调试的时候完全可以下载3个G的大文件。
但是将网站发布之后运行起来,就不行了。再下载3个G的文件时,只下下来一个几K的文件。请问这是为什么呀??

代码如下:

System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10240];

// Length of the file:
int length;

// Total bytes to read:
long dataToRead;

// Identify the file to download including its path.
string filepath = @"E:\software\SQL Server 2000 Personal Edition.ISO";

// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);

try
{
// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();

// Total bytes to read:
dataToRead = iStream.Length;

long p = 0;
if(Request.Headers["Range"]!=null)
{
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
if(p != 0)
{
Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));

iStream.Position = p;
dataToRead = dataToRead - p;
// Read the bytes.
while (dataToRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10240);

// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);

// Flush the data to the HTML output.
Response.Flush();

buffer= new Byte[10240];
dataToRead = dataToRead - length;
}
else
{
//prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
Response.Write("Error : " + ex.Message);
}
finally
{
if (iStream != null)
{
//Close the file.
iStream.Close();
}
Response.End();
}
wuyq11 2010-01-03
  • 打赏
  • 举报
回复
断点上传和下载
greymouseyu 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 newdigitime 的回复:]
另外,2G不是http瓶颈吧.是你的硬盘是FAT32格式,最大文件只能到2G,
保存的硬盘分区需要是NTFS格式.
[/Quote]

我的硬盘式NTFS的,下到2G之后就提示错误了

我说的通过FTP下载是通过.NET程序控制,不是直接进入FTP拷贝的。。。
newdigitime 2010-01-03
  • 打赏
  • 举报
回复
另外,2G不是http瓶颈吧.是你的硬盘是FAT32格式,最大文件只能到2G,
保存的硬盘分区需要是NTFS格式.
newdigitime 2010-01-03
  • 打赏
  • 举报
回复
FTP当然能下载到本地机.通过 ftp://帐户:密码@www.xxx.com
进入,选择相关文件,复制,然后在本地硬盘上粘贴.
Lovely_baby 2010-01-03
  • 打赏
  • 举报
回复

62,264

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧