Post Image to Web Server in c# (The remote Server returned an error (500) Internal Server Error)

StackOverflow https://stackoverflow.com/questions/23628760

  •  21-07-2023
  •  | 
  •  

Pergunta

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

Foi útil?

Solução

Thank you for responding to my question . i got the solution of the above problem.. The above client side code is perfect for posting image to server via HTTP but the problem was...

  • I was posting the image with the image path (path of local hard drive) not the image name, that was wrong.
  • But server needs a file name (image name) to save the file on the server's hard drive..

This was the main reason that's why server responding me (The remote Server returned an error (500) Internal Server Error).

Anyway server responding the above error when any type of exception comes in the server code and you haven't managed exception handling.

Hope it will help others

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top