如何通过HTTP请求方法C#从byte []汇编文件

时间:2019-03-20 12:28:08

标签: c# arrays file http-post

我想通过HTTP POST方法将文件作为byte []发送到另一台PC。另一方面,从byte []汇编文件的最有效方法是什么?我正在使用File.ReadAllBytes方法从文件中获取byte []。

2 个答案:

答案 0 :(得分:0)

如果您使用的是tcp,则网络协议将确保您的流以正确的顺序传输,并且不会丢失任何部分。因此,最简单的读取流将是最有效的。如果要使用并行路由并使用数据报。 如果文件很大,则必须分块发送和接收它。但是IP流可以将其隐藏起来。

例如:https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.getstream?view=netframework-4.7.2

答案 1 :(得分:0)

这对我有用。我使用此方法调用api方法并将文件作为byte []发送。我尝试发送整个byte [],但是api方法无法接收它。

private static async void SendFiles(string path)
        {    
            var bytes = File.ReadAllBytes(path);
            var length = bytes.Length;

            foreach (var b in bytes)
            {
                length--;
                string sendFilesUrl = $"http://api/communication/sendF/{b}/{length}";

                StringContent queryString = new StringContent(bytes.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded");          

                HttpResponseMessage response = await client.PostAsync(sendFilesUrl, queryString);

                string responseBody = await response.Content.ReadAsStringAsync();
            }
        }

我的api方法是

        [HttpPost]
        [Route("sendF/{b}/{length}")]
        public HttpResponseMessage SendF([FromUri]byte[] b, [FromUri]int length)
        {
            if(length != 0)
            {
                bytes.AddRange(b);                
            }
            else
            {
                File.WriteAllBytes(@"G:\test\test.exe", bytes.ToArray<byte>());
            }

            return CreateResponse(client);
        }

此代码对我有用,但是如果文件很大,则传递所有字节需要很长时间。目前,我正在寻找更有效的发送字节的方法。我想到的一种解决方案是分块发送byte []