且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在c#中将映像发布到Web服务器(远程服务器返回错误(500)内部服务器错误)

更新时间:2023-02-02 17:45:54

500内部服务器错误只是意味着您的代码崩溃,但由于没有异常消息或您发布的错误中有任何有用的内容,因此很难找到问题所在。因此,在您发布的方法的第一行设置断点并再次尝试操作。然后,您可以逐行遍历代码,查看调试器中发生的情况,检查变量的内容以及诸如此类的内容,直到它到达抛出异常的位置。


感谢您回答我的问题。我得到了上述问题的解决方案..

以上客户端代码非常适合通过HTTP将图像发布到服务器,但问题是...



- 我用图像路径(本地硬盘的路径)发布图像而不是图像名称,这是错误的。

- 但服务器需要文件名(图像名称)将文件保存在服务器的硬盘上..



这是服务器响应我的主要原因(远程服务器返回错误(500)内部服务器错误)。



当服务器代码中出现任何类型的异常并且您没有管理异常处理时,无论如何服务器响应上述错误。





希望它会帮助别人


I want to post my image to my web server using HTTP POST. And i am using the following method, got it from "***" 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

"500 Internal Server Error" just means that your code crashed, but since there is no exception message or anything useful in the error that you posted, it's pretty difficult to trace where the problem is. So, set a breakpoint on the first line in the method that you posted and try the operation again. You can then step through the code, line by line, and see what's going on in the debugger, checking the contents of variables and whatnot, until you get to the point where it throws an exception.


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