gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:51:50 24 4
gpt4 key购买 nike

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

memStream.Write(image, 0, signature.Length);,image是一个字节数组。

代码:

Uri wsHost = new Uri(WebServices.RESTEnpointAddress());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(wsHost);

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

// Boundary
var boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");

// Set the request type
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;
//request.ContentLength = docByte.Length;

// Create a new memory stream
Stream memStream = new MemoryStream();

// Boundary in bytes
byte[] boundaryByte = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

// body
memStream.Write(boundaryByte, 0, boundaryByte.Length);
string ImgBody = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n", "signImg", "tmpSignImgName");
ImgBody += "Content-Type: application/octet-stream\r\n\r\n";
byte[] ImgBodyByte = Encoding.ASCII.GetBytes(ImgBody);
memStream.Write(ImgBodyByte, 0, ImgBodyByte.Length);
memStream.Write(image, 0, signature.Length); // image ss a byte array
memStream.Write(boundaryByte, 0, boundaryByte.Length);

string signLocLatBody = string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", "signloclat");
signLocLatBody += latitude;
byte[] signLocLatBodyByte = Encoding.ASCII.GetBytes(signLocLatBody);
memStream.Write(signLocLatBodyByte, 0, signLocLatBodyByte.Length);
memStream.Write(boundaryByte, 0, boundaryByte.Length);

Stream stream = request.GetRequestStream();
memStream.Position = 0;
byte[] tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
stream.Write(tempBuffer, 0, tempBuffer.Length);
stream.Close();

最佳答案

     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 并将数据写入 requestStream,并带有 4096 字节的缓冲区。这应该包含在 try-catch 中,以便它可以捕获异常并处理它们。

关于c# - 将字节数组发布到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12972400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com