C# 将字节数组发布到服务器

C# 将字节数组发布到服务器,c#,C#,我正在使用POST向服务器发送一个字节数组和一个字符串,但没有成功,我做的对吗 memStream.Write(图像,0,签名,长度);,图像是一个字节数组 代码: 您需要使用memStream作为请求流的引用,例如 Stream memStream = request.GetRequestStream(); 那么,当你写信给它时,你就是在写信给请求 string boundary = "---------------------------" + DateTime.Now.Tick

我正在使用POST向服务器发送一个字节数组和一个字符串,但没有成功,我做的对吗

memStream.Write(图像,0,签名,长度);,图像是一个字节数组

代码:


您需要使用memStream作为请求流的引用,例如

Stream memStream = request.GetRequestStream();
那么,当你写信给它时,你就是在写信给请求

     string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
     byte[] boundaryBytes = System.Text.Encoding.ASCII.GetBytes("--" + boundary + "\r\n");

     HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(MyUrl);

     webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
     webRequest.Method = "POST";


     using (Stream requestStream = webRequest.GetRequestStream())
     {
              // write boundary bytes
              requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);

              // write header bytes.
              string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
              string header = string.Format(headerTemplate, "MyName", "MyFileName", "content type");
              byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
              requestStream.Write(headerbytes, 0, headerbytes.Length);

              using (MemoryStream memoryStream = new MemoryStream(imageBytes))
              {
                      byte[] buffer = new byte[4096];
                      int bytesRead = 0;
                      while ((bytesRead = memoryStream.Read(buffer, 0, buffer.Length)) != 0)
                      {
                              requestStream.Write(buffer, 0, bytesRead);
                      }
               }

               // write trailing boundary bytes.
               byte[] trailerBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
               requestStream.Write(trailerBytes, 0, trailerBytes.Length);

       }

       using (HttpWebResponse wr = (HttpWebResponse)webRequest.GetResponse())
       {
               using (Stream response = wr.GetResponseStream())
               {
                    // handle response stream.
               }
       }

这将读取MemoryStream,并使用4096字节的缓冲区将数据写入requestStream。这应该包装在一个try-catch中,这样它可以捕获异常并处理它们。

使用
WebRequest
发布数据,如下所示:

WebRequest request = WebRequest.Create ("MyURL"); 
request.Method = "POST"; 
string postData = "This is a test that posts this string to a Web server.";
request.ContentType = "image/jpeg"; 
request.ContentLength = byteArray.Length; 


//Here is the Business end of the code... 
Stream dataStream = request.GetRequestStream (); 
dataStream.Write (byteArray, 0, byteArray.Length); 
dataStream.Close (); 
//and here is the response. 
WebResponse response = request.GetResponse (); 

//Writing response from server

dataStream = response.GetResponseStream (); 
StreamReader reader = new StreamReader (dataStream); 
string responseFromServer = reader.ReadToEnd (); 
Console.WriteLine (responseFromServer); 
reader.Close (); 
dataStream.Close (); 
response.Close (); 

WebClient.UploadData
WebClient.UploadFile
使用起来更简单。“但不成功”。。。会发生什么?你有没有看过《小提琴手》等书,看看会发生什么?您是否比较了成功(通过浏览器)和未成功发布的原始http?@L.B.不确定这是否适用于multipartNo,
memStream
是OP想要复制到
stream
的缓冲数据通常我使用它来发布图像,但现在我发送一个字节数组和一个字符串字段。我同时发送两个字节数组(图像)还有一根绳子。
WebRequest request = WebRequest.Create ("MyURL"); 
request.Method = "POST"; 
string postData = "This is a test that posts this string to a Web server.";
request.ContentType = "image/jpeg"; 
request.ContentLength = byteArray.Length; 


//Here is the Business end of the code... 
Stream dataStream = request.GetRequestStream (); 
dataStream.Write (byteArray, 0, byteArray.Length); 
dataStream.Close (); 
//and here is the response. 
WebResponse response = request.GetResponse (); 

//Writing response from server

dataStream = response.GetResponseStream (); 
StreamReader reader = new StreamReader (dataStream); 
string responseFromServer = reader.ReadToEnd (); 
Console.WriteLine (responseFromServer); 
reader.Close (); 
dataStream.Close (); 
response.Close ();