コード例 #1
0
ファイル: WebServer.cs プロジェクト: taisandog/OtherSource
        /// <summary>
        /// 显示文件
        /// </summary>
        /// <param name="filename"></param>
        private void ShowFile(string filename, string name, RequestInfo request, ResponseInfo response)
        {
            FileInfo finf = new FileInfo(filename);

            response.MimeType = WebCommon.GetContentType(finf.Extension.Trim('.'));
            string strName = RequestInfo.GetFileName(request, name);

            response.Header["Content-Disposition"] = "attachment;filename=" + strName;
            long len = finf.Length;

            response.Header["Accept-Ranges"]             = "bytes";
            response.Header["Content-Transfer-Encoding"] = "binary";
            if (request.Header.ContainsKey("range"))                                                     //如果客户端指定了分段下载
            {
                List <RangeInfo> lstRange = ResponseInfo.GetRange(request.Header["Range"], finf.Length); //处理区段信息
                if (lstRange.Count > 0)
                {
                    response.Header["Content-Range"] = "bytes " + lstRange[0].Start + "-" + lstRange[0].End + "/" + finf.Length;//指定区段
                    response.StatusCode = 206;
                }
            }
            try
            {
                response.UserTag     = finf;
                response.Length      = len;
                response.RangeLength = finf.Length;
            }
            catch (Exception ex)
            {
                response.Write("数据读取失败:" + ex.Message);
            }
        }
コード例 #2
0
ファイル: WebServer.cs プロジェクト: taisandog/OtherSource
 void _server_OnRequestSendingBody(RequestInfo request, ResponseInfo response, System.Net.Sockets.Socket requestSocket)
 {
     if (response.UserTag != null)
     {
         FileInfo  finf  = response.UserTag as FileInfo;
         RangeInfo range = null;
         if (request.Header.ContainsKey("range"))
         {
             List <RangeInfo> lstRange = ResponseInfo.GetRange(request.Header["Range"], finf.Length);
             if (lstRange.Count > 0)
             {
                 range = lstRange[0];
             }
         }
         if (range == null)
         {
             range     = new RangeInfo();
             range.End = finf.Length - 1;
         }
         if (finf != null)
         {
             byte[] buff = new byte[512 * 1024];
             int    read = 0;
             using (FileStream stm = finf.Open(FileMode.Open))
             {
                 stm.Position = range.Start;
                 long totleLen = range.Length;
                 while (true)
                 {
                     read = stm.Read(buff, 0, buff.Length);
                     if (read > totleLen)
                     {
                         read = (int)totleLen;
                     }
                     if (read > 0)
                     {
                         requestSocket.Send(buff, 0, read, SocketFlags.None);
                         totleLen -= read;
                     }
                     if (read <= 0 || totleLen <= 0)
                     {
                         break;
                     }
                 }
             }
         }
     }
 }