Esempio n. 1
0
        /// <summary>
        /// 解析文件表单数据
        /// </summary>
        /// <param name="request"></param>
        /// <param name="body"></param>
        private static void AnalyzeFormDataBody(this HttpRequest request, string body, int from, int to, byte[] reqData)
        {
            try
            {
                var boundary  = request.Headers["Content-Type"].Split(';')[1].Trim().Split('=')[1];
                var files     = new List <HttpRequestFile>();
                var splitWord = $"--{boundary}";
                foreach (var item in body.Split(new String[] { splitWord }, StringSplitOptions.None))
                {
                    if (string.IsNullOrEmpty(item) || string.IsNullOrWhiteSpace(item))
                    {
                        from = from + item.Length;
                        continue;
                    }
                    from += splitWord.Length;

                    if (item.Trim() == "--")
                    {
                        break;
                    }
                    var fileInfo = new HttpRequestFile();

                    var splitIndex = item.IndexOf("\r\n\r\n");
                    var formHeader = GetEncodedStr(from, from + splitIndex, reqData, Encoding.UTF8);// item.Substring(0, splitIndex);
                    fileInfo.AnalyzeFormHeader(formHeader);
                    var formbody = item.Substring(splitIndex + 4, item.Length - splitIndex - 6);


                    from += splitIndex + 4;
                    to    = from + formbody.Length;
                    //有文件名的才当作文件看待
                    if (!string.IsNullOrEmpty(fileInfo.Filename))
                    {
                        fileInfo.AnalyzeFormBody(from, to, reqData);
                        files.Add(fileInfo);
                    }
                    else
                    {
                        body = GetEncodedStr(from, to, reqData, Encoding.UTF8);
                        request.Form.Add(fileInfo.Name, formbody);
                    }
                    from = to + 2;
                }
                request.Files = files;
            }
            catch (Exception)
            {
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 解析表单内容
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="formBody"></param>
        private static void AnalyzeFormBody(this HttpRequestFile fileInfo, int from, int to, byte[] reqData)
        {
            try
            {
                var buffer = reqData.Skip(from).Take(to - from).ToArray();

                var fstream = new MemoryStream();
                fstream.Write(buffer, 0, buffer.Length);
                fstream.Flush();
                fstream.Position    = 0;
                fileInfo.FileStream = fstream;
            }
            catch (Exception)
            {
            }
        }
Esempio n. 3
0
 /// <summary>
 /// 处理文件头部
 /// </summary>
 /// <param name="request"></param>
 /// <param name="formHeader"></param>
 private static void AnalyzeFormHeader(this HttpRequestFile fileInfo, string formHeader)
 {
     try
     {
         var lines = formHeader.Split(new String[] { "\r\n" }, StringSplitOptions.None);
         foreach (var line in lines)
         {
             if (string.IsNullOrEmpty(line))
             {
                 continue;
             }
             var lineInfo = line.Split(':');
             if (lineInfo[0] == "Content-Disposition")
             {
                 foreach (var item in lineInfo[1].Split(';'))
                 {
                     var itemInfo = item.Split('=');
                     if (itemInfo[0].Trim().Equals("name"))
                     {
                         fileInfo.Name = item.Split('=')[itemInfo.Length - 1].Trim('"');
                     }
                     if (itemInfo[0].Trim().Equals("filename"))
                     {
                         fileInfo.Filename = item.Split('=')[itemInfo.Length - 1].Trim('"');
                     }
                 }
             }
             else if (lineInfo[0] == "Content-Type")
             {
                 fileInfo.ContentType = lineInfo[1].Trim();
             }
         }
     }
     catch (Exception)
     {
     }
 }