ASP.NET - 如何从 HttpContext.Request 中的参数获取文件字节数组

ASP.NET - How to get file byte array from parameters in HttpContext.Request

提问人:Robin Sun 提问时间:8/6/2023 最后编辑:Robin Sun 更新时间:8/7/2023 访问量:63

问:

这里有两部分。客户端部件用于将参数传递到服务器端。服务器端是 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();

如何获取文件的确切字节数组?谢谢。

C# asp.net InputStream

评论

0赞 Mohammad Aghazadeh 8/6/2023
您使用的是哪个版本的 ASP.NET?您想在哪个部分访问?Request
0赞 Robin Sun 8/6/2023
它位于 ashx ProcessRequest 方法中。

答:

-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);
        }