提问人:Robin Sun 提问时间:8/6/2023 最后编辑:Robin Sun 更新时间:8/7/2023 访问量:63
ASP.NET - 如何从 HttpContext.Request 中的参数获取文件字节数组
ASP.NET - How to get file byte array from parameters in HttpContext.Request
问:
这里有两部分。客户端部件用于将参数传递到服务器端。服务器端是 ashx 文件。
客户端代码如下。HttpClient
HttpClient client = new HttpClient();
MultipartFormDataContent multipartContent = new MultipartFormDataContent();
if (!string.IsNullOrEmpty(attachFileName) && attachContent != null
&& attachContent.Length > 0)
{
var imageBinaryContent = new ByteArrayContent(attachContent);
multipartContent.Add(imageBinaryContent, attachFileName);
multipartContent.Add(new StringContent(attachFileName), "attachFileName");
}
multipartContent.Add(new StringContent("xxx"), "subject");
var response = client.PostAsync(url, multipartContent).Result;
如何在服务器部分获取文件数组?我尝试使用下面的代码来获取文件数组,但文件已损坏。我认为输入流必须包含更多数据,而不仅仅是字节数组。
MemoryStream ms = new MemoryStream();
context.Request.InputStream.CopyTo(ms);
byte[] data = ms.ToArray();
如何获取文件的确切字节数组?谢谢。
答:
-1赞
Robin Sun
8/7/2023
#1
我找到了一个四处走动的解决方案。我希望它能帮助那些也面临这个问题的人。我没有找到在HttpContext.Request中捕获字节数组的好方法。然后我决定在发送之前将字节数组转换为 base64 字符串,然后在服务器端将 base64 字符串转换回字节数组。
在客户端,将字节数组转换为 base64 字符串。
HttpClient client = new HttpClient();
MultipartFormDataContent multipartContent = new MultipartFormDataContent();
if (!string.IsNullOrEmpty(attachFileName) && attachContent != null && attachContent.Length > 0)
{
multipartContent.Add(new StringContent(Convert.ToBase64String(attachContent)), attachFileName);
multipartContent.Add(new StringContent(attachFileName), "attachFileName");
}
var response = client.PostAsync(url, multipartContent).Result;
在服务器端,将 base64 字符串转换回字节数组。
string attachFileName = context.Request.Form["attachFileName"];
string fileBody = context.Request[attachFileName];
byte[] data = null;
if (!string.IsNullOrEmpty(attachFileName) && !string.IsNullOrEmpty(fileBody))
{
data = Convert.FromBase64String(fileBody);
}
评论
Request