C#实现大文件分块发送到客户端

客户端

System.IO.Stream iStream = null;

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

 // Length of the file:
 int length;

 // Total bytes to read:
 long dataToRead;

 // Identify the file to download including its path.
 string filepath  = "DownloadFileName";

 // 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);

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

  Response.ContentType = "application/octet-stream";
  Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

  // 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, 10000);

    // 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[10000];
    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();
  }
 }
 

 

时间: 2024-10-29 03:20:42

C#实现大文件分块发送到客户端的相关文章

c#-C#大文件分块上传原理问题

问题描述 C#大文件分块上传原理问题 我对大文件分块上传的概念是,通过offset每次读取1M文件流,再通过http发送Content-Range和这1M文件流,换句话说分块上传是不是需要每次都发送请求头?我看见到有些代码,只发送一次文件头,然后不断发送文件流,虽然没成功,但是留下了疑惑 解决方案 通过 HTTP 进行大数据传输,不是好的选择. 如果一定要用 HTTP,传输时 HTTP 协议头肯定是不可少的.至于其中的数据,由于每次 HTTP 都是一次 Socket 连接.数据传输.断开的过程,

android大文件切割发送,接收后在合并显示

问题描述 android大文件切割发送,接收后在合并显示 android 大文件怎么实现分块传输,最后在合并显示.可以通过切割实现吗 解决方案 是文件断点续传吗...

asp.net大文件分块上传与进度显示,完整项目源码

很久就想自己做一个文件上传的组件了.只是一直忙也确实没有那个动力. 就是采用隐含的HttpWorkerRequest实现的. 具体的实现原理与过程我就不细说了.毕竟这方面资料很多而且我的代码都贴上了. 可以通过显式实现指定的接口而后在配置文件中进行配置即可实现自定义的文件处理操作. 由于小弟水平有限不足之处请大家指教. 测试的最大数据量是两个文件共1.4G .速度大约在6M-7M/s. 在HttpModule项目中有个Readme.txt文件对如何使用进行了介绍.  资料部分是我学习时在网上找的

无法上传大文件到ftp服务器

问题描述 无法上传大文件到ftp服务器 客户端我用的是FlashFXP,其他工具也试 过,比如1G的文件,每次上传到300多兆久断开了,检查了服务器,没有限制大小 解决方案 最有可能是中间的安全网关类设备做了限制.

PHP搭建大文件切割分块上传功能示例

背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现意外的情况.  但是在有些业务场景中,大文件上传又是必须的,比如邮箱附件,或者内部OA等等. 问题 服务端为什么不能直接传大文件?跟php.ini里面的几个配置有关 upload_max_filesize = 2M //PHP最大能接受的文件大小 post_max_size = 8M //PHP能收到的最大P

asp.net-C# Activx 上传分块上传大文件时能由Activx来完成合并分块的工作吗

问题描述 C# Activx 上传分块上传大文件时能由Activx来完成合并分块的工作吗 我用C#做activx上传大文件,采用http分块上传的思想,可是服务器端的人说,分块和拼接的工作都应由activx完成,上传完了给服务器一个完成的信号,服务器端只负责把拼接的文件编入数据库和移动到合适的位置,可是网上的好多资料都是拼接工作在服务器端完成,Activx真的能实现远程拼接工作吗,如果能,能否给一些资料,谢谢 解决方案 服务器端的人说的不对,ActiveX只需要分块就可以了.再拼接上显然是服务器

样式-将多个css文组合输出,返回到客户端发送到客户端发现每个拼合文件的开头会多出红点,导致css无效

问题描述 将多个css文组合输出,返回到客户端发送到客户端发现每个拼合文件的开头会多出红点,导致css无效 ,共有3个组合文件,上图中这两个红点分别是两个文件的开头部分.请教各位是啥情况!css文件中样式都是顶格写的,开头没有特殊字符的! 解决方案 是不是有不可见字符啊. 解决方案二: css保存用的什么编码格式? utf-8? ascii? 解决方案三: 应该是字符编码问题, 原来的可能是gbk, 后面发布到网站上是utf-8

socket基于tcp发送大文件的问题

问题描述 小弟在做发送大文件,分步发送,1M1M的发送,在byte前都加行了标识1表示发送文件,0表示信息,但是问题出现了,接收的时候第1次是以1开头的byte的数组,第2次居然不是了,小弟找不到问题的所在,求帮助.发送文件代码:publicvoidSendFile(stringstrMsg)//发送文件{using(FileStreamfs=newFileStream(strMsg,FileMode.Open)){byte[]byFile=newbyte[1024*1024*1];while(

asp.net下大文件上传知识整理_实用技巧

最近做在做ePartner项目,涉及到文件上传的问题. 以前也做过文件上传,但都是些小文件,不超过2M. 这次要求上传100M以上的东西. 没办法找来资料研究了一下.基于WEB的文件上传可以使用FTP和HTTP两种协议,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便. 剩下只有HTTP.在HTTP中有3种方式,PUT.WEBDAV.RFC1867,前2种方法不适合大文件上传,目前我们使用的web上传都是基于RFC1867标准的