Sto tentando di caricare un file e un invio con alcuni parametri sul mio sito utilizzando .NET/C#. Dopo aver letto alcuni tutorial che fanno alcuni parametri o un file, ho provato, senza successo, a combinarli. Ecco come provo a farlo:WebRequest POST con file e parametri
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();
Quando eseguire, ottengo un'eccezione 500, dicendo "sezione Intestazione ha più di 10240 bnytes (forse non è correttamente terminata)" e Wireshark mi informa che il la richiesta inviata era un pacchetto malformato, in cui il multipart MIME era malformato.
Ci sono probabilmente diversi problemi qui, quindi per favore fatemelo sapere tutti i problemi si possono avvistare
Aggiornamento:. Separare MIME da C#/NET, ho generato un thread qui: https://stackoverflow.com/questions/1880002/error-in-mime-packet-for-http-post
Aggiornamento 2: Quindi il back-end ha effettivamente problemi con la lunghezza del contenuto, dicendo che la quantità di byte disponibili per la lettura è inferiore alla lunghezza del contenuto dichiarato. MA! Se riduco la lunghezza del contenuto in req.ContentLength di conseguenza, non ho una dimensione del buffer abbastanza grande per l'invio dei dati. Eventuali suggerimenti?
Update 3: In realtà, sembra che l'intestazione ha una troppo grande rispetto alle dimensioni quantità di dati che contiene
Se si utilizza .NET> = 4.0, saltare alla mia risposta per un modo più semplice per farlo. – Joshcodes