Я пытаюсь загрузить файл и отправить по нескольким параметрам на мой сайт с помощью .NET/C#. Прочитав несколько руководств, которые выполняют либо несколько параметров, либо файл, я попытался, безуспешно, объединить их. Вот как я пытаюсь сделать это:WebRequest POST с обоими параметрами и параметрами
WebRequest req = WebRequest.Create(baseURL + "upload");
req.Credentials = new NetworkCredential(username, password);
String boundary = "B0unD-Ary";
req.ContentType = "multipart/form-data; boundary=" + boundary;
req.Method = "POST";
((HttpWebRequest)req).UserAgent = "UploadTester v0.1";
string postData = "--" + boundary + "\nContent-Disposition: form-data\n";
postData += "myId=123&someFk=456";
postData += "\n--" + boundary + "\nContent-Disposition: form-data; name=\"file\" filename=\"upload.pdf\" Content-Type: application/pdf\n\n";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
byte[] filedata = null;
using (BinaryReader reader = new BinaryReader(File.OpenRead("myfile.pdf")))
filedata = reader.ReadBytes((int)reader.BaseStream.Length);
req.ContentLength = byteArray.Length + filedata.Length;
req.GetRequestStream().Write(byteArray, 0, byteArray.Length);
req.GetRequestStream().Write(filedata, 0, filedata.Length);
WebResponse response = req.GetResponse();
Stream data = response.GetResponseStream();
StreamReader sReader = new StreamReader(data);
String sResponse = sReader.ReadToEnd();
response.Close();
Когда я исполню его, я получаю 500 исключение, говоря «Раздел заголовка имеет более чем 10240 bnytes (может быть, это не правильно прекращено)» и Wireshark сообщает мне, что запрос отправлен был неправильным пакетом, в котором MIME-мультипорт был искажен.
Есть, вероятно, несколько вопросов здесь, поэтому, пожалуйста, дайте мне знать все проблемы, вы можете определить
Update:. Отделить MIME от C#/.NET, я породил поток здесь: https://stackoverflow.com/questions/1880002/error-in-mime-packet-for-http-post
Обновление 2: Таким образом, у бэкэнда действительно есть проблемы с длиной содержимого, говоря, что количество байтов, доступных для чтения, меньше, чем заявленная длина контента. НО! Если я уменьшу длину содержимого в req.ContentLength соответственно, у меня нет размера буфера, достаточно большого для отправки данных. Какие-либо предложения?
Update 3: На самом деле, это выглядит как заголовок имеет слишком большой размер по сравнению с тем, сколько данных содержит
Если вы используете .NET> = 4.0, пропустите свой ответ для более легкого способа сделать это. – Joshcodes