Advertisement
Guest User

Cristian Romanescu

a guest
Jun 8th, 2010
2,166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.00 KB | None | 0 0
  1. using System;
  2. using System.Collections.Specialized;
  3. using System.IO;
  4. using System.Web;
  5. using System.Net;
  6. using log4net;
  7.  
  8.  
  9. namespace ImportTool
  10. {
  11.   /// <summary>
  12.   /// Description of ImportTool.
  13.   /// </summary>
  14.   public sealed class ImportUtilities
  15.   {
  16.     public static readonly ILog log = LogManager.GetLogger(typeof(ImportUtilities));
  17.  
  18.     public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc) {
  19.       log.Debug(string.Format("Uploading {0} to {1}", file, url));
  20.       string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  21.       byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  22.  
  23.       HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  24.       wr.ContentType = "multipart/form-data; boundary=" + boundary;
  25.       wr.Method = "POST";
  26.       wr.KeepAlive = true;
  27.       wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  28.  
  29.       Stream rs = wr.GetRequestStream();
  30.  
  31.       string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  32.       foreach (string key in nvc.Keys)
  33.       {
  34.         rs.Write(boundarybytes, 0, boundarybytes.Length);
  35.         string formitem = string.Format(formdataTemplate, key, nvc[key]);
  36.         byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  37.         rs.Write(formitembytes, 0, formitembytes.Length);
  38.       }
  39.       rs.Write(boundarybytes, 0, boundarybytes.Length);
  40.  
  41.       string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
  42.       string header = string.Format(headerTemplate, paramName, file, contentType);
  43.       byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  44.       rs.Write(headerbytes, 0, headerbytes.Length);
  45.      
  46.       FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
  47.       byte[] buffer = new byte[4096];
  48.       int bytesRead = 0;
  49.       while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) {
  50.         rs.Write(buffer, 0, bytesRead);
  51.       }
  52.       fileStream.Close();
  53.  
  54.       byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  55.       rs.Write(trailer, 0, trailer.Length);
  56.       rs.Close();
  57.       rs = null;
  58.  
  59.       WebResponse wresp = null;
  60.       try {
  61.         wresp = wr.GetResponse();
  62.         Stream stream2 = wresp.GetResponseStream();
  63.         StreamReader reader2 = new StreamReader(stream2);
  64.       } catch(Exception ex) {
  65.         log.Error("Error uploading file:" + file, ex);
  66.         throw ex;
  67.       } finally {
  68.         if(wresp != null) {
  69.           wresp.Close();
  70.           wresp = null;
  71.         }
  72.         wr = null;
  73.       }
  74.     }
  75.   }
  76. }
  77.  
  78. // Sample usage:
  79.  NameValueCollection nvc = new NameValueCollection();
  80.     nvc.Add("id", "TTR");
  81.     nvc.Add("btn-submit-photo", "Upload");
  82.     HttpUploadFile("http://your.server.com/upload",
  83.          @"C:\test\test.jpg", "file", "image/jpeg", nvc);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement