Forum » Programiranje » [c#] multipart-form upload datoteke
[c#] multipart-form upload datoteke
Matthew ::
Na strežniku imam PHP skripto s formo, ki sprejme nekaj tekstovnih vnosov in eno datoteko. Z metodo POST se to potem obdela in shrani tako, kot je treba.
Zdaj se pa mučim s C# aplikacijo, ki bi te podatke (par tekstovnih polj in datoteko) poslala v obdelavo tej skripti. Je kdo že počel kaj takega in mi lahko pomaga?
Zdaj se pa mučim s C# aplikacijo, ki bi te podatke (par tekstovnih polj in datoteko) poslala v obdelavo tej skripti. Je kdo že počel kaj takega in mi lahko pomaga?
Matthew ::
Znam poslati datoteko, ki je potem v PHP datoteki na strežniku dostopna s $_FILES in pa tekst, ki je dostopen preko $_GET. Rad pa bi tekst prebral it $_POST.
Uporabljam spodnjo kodo:
Uporabljam spodnjo kodo:
CookieContainer cookies = new CookieContainer(); NameValueCollection querystring = new NameValueCollection(); querystring["uname"] = "Dodo"; String uploadfile; uploadfile = "M:\\slike\\slika.jpg"; String outdata = UploadFileEx(uploadfile, "http://www.spletnastran.si/test.php", "filename", "image/jpeg", querystring, cookies); MessageBox.Show(outdata); public static string UploadFileEx(string uploadfile, string url, string fileFormName, string contenttype, NameValueCollection querystring, CookieContainer cookies) { if ((fileFormName == null) || (fileFormName.Length == 0)) { fileFormName = "file"; } if ((contenttype == null) || (contenttype.Length == 0)) { contenttype = "application/octet-stream"; } string postdata; postdata = "?"; if (querystring != null) { foreach (string key in querystring.Keys) { postdata += key + "=" + querystring.Get(key) + "&"; } } Uri uri = new Uri(url + postdata); string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); webrequest.CookieContainer = cookies; webrequest.ContentType = "multipart/form-data; boundary=" + boundary; webrequest.Method = "POST"; // Build up the post message header StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append(fileFormName); sb.Append("\"; filename=\""); sb.Append(Path.GetFileName(uploadfile)); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append(contenttype); sb.Append("\r\n"); sb.Append("\r\n"); string postHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); // Build the trailing boundary string as a byte array // ensuring the boundary appears on a line by itself byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read); long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length; webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream(); // Write out our post header requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); // Write out the file contents byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); // Write out the trailing boundary requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); WebResponse responce = webrequest.GetResponse(); Stream s = responce.GetResponseStream(); StreamReader sr = new StreamReader(s); return sr.ReadToEnd(); }
Matthew ::
OK, mi je že uspelo.
Tukaj je spremenjena koda:
Tukaj je spremenjena koda:
NameValueCollection formValues = new NameValueCollection(); formValues["uname"] = "Dodo"; String uploadfile; uploadfile = "M:\\slike\\slika.jpg"; String outdata = UploadFileEx(uploadfile, "http://www.spletnastran.si/test.php", "filename", "image/jpeg", formValues, null); public static string UploadFileEx(string uploadfile, string url, string fileFormName, string contenttype, NameValueCollection formValues, CookieContainer cookies) { if ((fileFormName == null) || (fileFormName.Length == 0)) { fileFormName = "file"; } if ((contenttype == null) || (contenttype.Length == 0)) { contenttype = "application/octet-stream"; } Uri uri = new Uri(url); string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); webrequest.CookieContainer = cookies; webrequest.ContentType = "multipart/form-data; boundary=" + boundary; webrequest.Method = "POST"; // Build up the post message header StringBuilder sb = new StringBuilder(); for (int i = 0; i < formValues.Count; i++) { sb.Append("--"); sb.Append(boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\"" + formValues.GetKey(i) + "\""); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append(formValues.Get(i)); sb.Append("\r\n"); } sb.Append("--"); sb.Append(boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\"" + fileFormName + "\"; filename=\"" + Path.GetFileName(uploadfile) + "\""); sb.Append("\r\n"); sb.Append("Content-Type: " + contenttype); sb.Append("\r\n"); sb.Append("\r\n"); string postHeader = sb.ToString(); MessageBox.Show(postHeader); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); // Build the trailing boundary string as a byte array // ensuring the boundary appears on a line by itself byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read); long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length; webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream(); // Write out our post header requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); // Write out the file contents byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); // Write out the trailing boundary requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); WebResponse responce = webrequest.GetResponse(); Stream s = responce.GetResponseStream(); StreamReader sr = new StreamReader(s); return sr.ReadToEnd(); }
Zgodovina sprememb…
- spremenil: Matthew ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Visual C# problemOddelek: Programiranje | 3149 (2321) | mladec |
» | [Java] Sortiranje razredovOddelek: Programiranje | 1466 (1213) | Spura |
» | [PHP]Zajem slike iz direktorijaOddelek: Programiranje | 1246 (1163) | KernelPanic |
» | Printanje na papir java problemOddelek: Programiranje | 1192 (999) | javaMaster |
» | [C#] Simobilov GlasnikOddelek: Programiranje | 4358 (1438) | Mrch |