在c#中将映像发布到Web服务器(远程服务器返回错误(500)内部服务器错误) [英] Post Image to Web Server in c# (The remote Server returned an error (500) Internal Server Error)

查看:104
本文介绍了在c#中将映像发布到Web服务器(远程服务器返回错误(500)内部服务器错误)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用HTTP POST将我的图片发布到我的网络服务器。我正在使用以下方法,从stackoverflow平台获取它,但下面的代码最初给我错误(405)方法不允许但今天它给我一个错误远程服务器返回错误( 500)内部服务器错误我确定我做错了什么..只需要你的专家建议..



  public   static   void  HttpUploadFile( string  url, string 文件,字符串 paramName, string  contentType,NameValueCollection nvc)
{
// log.Debug(string.Format(将{0}上传到{1},文件,网址));
// < span class =code-comment> MessageBox.Show(string.Format(Uploading {0}到{1},file,url));
string boundary = --------------------------- + DateTime。 Now.Ticks.ToString( x);
byte [] boundarybytes = System.Text.Encoding.ASCII.GetBytes( \\\\ n - + boundary + \\ \\r\\\
);

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} \\\\\\\\ 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} \\\\\ nnContent-Type:{2} \\\ \\r\\\
;
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( \\\\ n - + boundary + - \r\\\
);
rs.Write(预告片, 0 ,trailer.Length);
rs.Close();

WebResponse wresp = null ;
尝试
{
wresp = wr.GetResponse(); // 此行中的捕获异常

Stream stream2 = wresp .GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
MessageBox.Show(reader2.ReadToEnd(), 上传文件,服务器响应为:);
// log.Debug(string.Format(文件已上传,服务器响应为:{0} ,reader2.ReadToEnd()));
}
catch (例外情况)
{
// log.Error(错误上传文件,ex);
MessageBox.Show (ex.Message, 上传文件时出错);
if (wresp!= null
{
wresp。关();
wresp = null ;
}
}
最后
{
wr = ;
}
}





并在按钮Click事件下按以下方式调用上述方法... < br $>


 私人  void  btn_Click( object  sender,EventArgs e)
{
NameValueCollection nvc = new NameValueCollection();
nvc.Add( username Haris);
nvc.Add( password 传递);
nvc.Add( Title 测试图像);
nvc.Add( 评论 测试图像);
// nvc.Add(fileUpload1,a.jpg);
HttpUploadFile( http://blog.test.co/testpost.aspx,@ imgpath, fileUpload1 < span class =code-string> image / jpeg,nvc);

}





我希望我已经解释得足够......你对此事的建议将不胜感激...



提前谢谢

解决方案

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


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

以上客户端代码非常适合通过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 "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

解决方案

"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


这篇关于在c#中将映像发布到Web服务器(远程服务器返回错误(500)内部服务器错误)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆