Wednesday, 28 August 2013

File Not Found Exception with Http Request

File Not Found Exception with Http Request

This is a follow up to my last question here
After doing some more searching I found the following question located
here. Now I've taken that code and placed into my program. I made a few
changes so that it takes in an image file as opposed to a string with the
file location. This is my version:
public static void HttpUploadFile(string url, Image file, string
paramName, string contentType, NameValueCollection nvc)
{
Console.Write(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.ToString(),
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();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
Console.Write(string.Format("File uploaded, server response
is: {0}", reader2.ReadToEnd()));
}
catch (Exception ex)
{
Console.Write("Error uploading file", ex);
if (wresp != null)
{
wresp.Close();
wresp = null;
}
}
finally
{
wr = null;
}
}
I had hoped this would take the image stored in my imagePreview picture
box and pass that along to my server via the http address. However when I
run the program I get an error reporting that it cannot find my file, even
though the image is clearly in my picture box.
I'm not stumped as how to how to fix this issue. Could someone please help
me out?
To use the above method I do the following as well:
NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "TTR");
nvc.Add("btn-submit-photo", "Upload");
HttpUploadFile("http://websiteadress.com/images/uploadimage.html",
imagePreview.Image,"file", "image/jpeg", nvc);

No comments:

Post a Comment