I want to post my image to my web server using HTTP POST.
And i am using the following method, got it from "stackoverflow" platform, but the following code initially giving me the error of "(405) Method not allowed" but today it is giving me an error "The remote Server returned an error (500) Internal Server Error"
I am sure i am doing something wrong.. Just needs your expert advise..
public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc)
{
//log.Debug(string.Format("Uploading {0} to {1}", file, url));
// MessageBox.Show(string.Format("Uploading {0} to {1}", file, url));
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream rs = wr.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, paramName, file, contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try
{
wresp = wr.GetResponse(); **//Catching Exception in this line...**
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
MessageBox.Show(reader2.ReadToEnd(), "File uploaded, server response is: ");
// log.Debug(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
}
catch (Exception ex)
{
//log.Error("Error uploading file", ex);
MessageBox.Show(ex.Message, "Error uploading file");
if (wresp != null)
{
wresp.Close();
wresp = null;
}
}
finally
{
wr = null;
}
}
and calling the above method in the following way under button Click event...
private void btn_Click(object sender, EventArgs e)
{
NameValueCollection nvc = new NameValueCollection();
nvc.Add("username", "Haris");
nvc.Add("password", "pass");
nvc.Add("Title", "Test Image");
nvc.Add("Comments", "Test Image");
//nvc.Add("fileUpload1", "a.jpg");
HttpUploadFile("http://blog.test.co/testpost.aspx", @imgpath, "fileUpload1", "image/jpeg", nvc);
}
I hope i have explained enough...
Your advise in this matter will be much appreciated...
Thanks in advance