合作廠商模擬 POST 格式不標準,導致 Request.Form、Request.Files 皆無法取值,需自行解析 Request.InputStream。
Request.BinaryRead(Request.TotalBytes)。headLength、footLength。headLength,長度 = total - headLength - footLength。MemoryStream 或陣列複製取出檔案內容或存檔。byte[] input = Request.BinaryRead(Request.TotalBytes);
string source = Encoding.UTF8.GetString(input);
// 1. 正則比對非檔案部分 (Header + 所有欄位 + 分隔線)
Regex rg = new Regex(@"你的HeaderPattern", RegexOptions.Singleline);
if (!rg.IsMatch(source)) return;
int headLength = Encoding.UTF8.GetBytes(rg.Match(source).Value).Length;
// 2. 結尾 boundary 固定長度 (含 \r\n)
string tail = "\r\n--" + boundary + "--\r\n";
int footLength = Encoding.UTF8.GetBytes(tail).Length;
// 3. 存檔
using (var fss = new FileStream(savePath, FileMode.Create))
{
fss.Write(input, headLength, input.Length - headLength - footLength);
}
// 4. 或取得檔案位元組陣列
byte[] fileBytes = new byte[input.Length - headLength - footLength];
using (var ms = new MemoryStream(input))
{
ms.Seek(headLength, SeekOrigin.Begin);
ms.Read(fileBytes, 0, fileBytes.Length);
}
headLength/footLength,任何多漏 \r\n 皆會導致檔案損毀。HttpPostedFile、MultipartFormDataParser)。