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

问题描述 投票:0回答:2

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

c# arrays file http-post
2个回答
0
投票

如果您使用tcp,网络协议将确保您的流顺序正确,没有丢弃部分。因此,最简单的读取流将是最有效的。如果要使用并行路由并使用数据报。如果文件很大,则必须以块的形式发送和接收文件。但是IP流可以隐藏这些信息。

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


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 []

© www.soinside.com 2019 - 2024. All rights reserved.