То, с чем вы сталкиваетесь, - это граница, используемая для разделения различных частей HTTP-запроса. В начале запроса должен быть заголовок Content-type, а внутри этого заголовка есть оператор границы, например:
Content-Type: multipart/mixed;boundary=gc0p4Jq0M2Yt08jU534c0p
Как только вы найдете эту границу, просто разделите ваш запрос на границе с двумя дефисами (-), добавленными к нему. Другими словами, разделите ваш контент на:
"--"+Headers.Get("Content-Type").Split("boundary=")[1]
Сорт псевдокода есть, но он должен понять смысл. Это должно разделить данные составной формы на соответствующие разделы.
Для получения дополнительной информации см. RFC1341
Стоит отметить, что, очевидно, к конечной границе добавляются два дефиса и к концу границы.
РЕДАКТИРОВАТЬ: Хорошо, проблема в том, что вы не разбиваете данные формы на необходимые компоненты. Разделы запроса multipart / form-data могут быть обработаны по отдельности как отдельные запросы (то есть они могут содержать заголовки). Что вы, вероятно, должны сделать, это прочитать байты в строку:
string formData = Encoding.ASCII.GetString(byteBuffer);
разбить на несколько строк на основе границы:
string boundary = "\r\n"+context.Request.ContentType.Split("boundary=")[1];
string[] parts = Regex.Split( formData, boundary );
перебирает каждую строку, отделяя заголовки от содержимого. Поскольку вам действительно нужно значение байта содержимого, следите за смещением данных, поскольку преобразование из ASCII обратно в байт может работать неправильно (я могу ошибаться, но я параноик):
int dataOffset = 0;
for( int i=0; i < parts.Length; i++ ){
string header = part.Substring( 0, part.IndexOf( "\r\n\r\n" ) );
dataOffset += boundary.Length + header.Length + 4;
string asciiBody = part.Substring( part.IndexOf( "\r\n\r\n" ) + 4 );
byte[] body = new byte[ asciiBody.Length ];
for( int j=dataOffset,k=0; j < asciiBody.Length; j++ ){
body[k++] = byteBuffer[j];
}
// body now contains your binary data
}
ПРИМЕЧАНИЕ. Это не проверено, поэтому может потребоваться некоторая настройка.