Как собрать файл из byte [] через метод HTTP-запроса C # - PullRequest
0 голосов
/ 20 марта 2019

Я хочу отправить файл в виде байта [] на другой компьютер через метод HTTP POST.Каков наиболее эффективный способ собрать файл из байта [] с другой стороны?Я использую File.ReadAllBytes метод для получения байта [] из файла.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вот что у меня сработало. Я использовал этот метод для вызова метода API и отправки файла в виде байта []. Я попытался отправить целый байт [], но метод 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);
        }

Этот код работает для меня, но для передачи всех байтов требуется очень много времени, если файл большой. В настоящее время я ищу более эффективный способ отправки байтов. Одно решение, которое пришло мне в голову, - это отправить байт [] кусками

0 голосов
/ 20 марта 2019

Если вы используете tcp, сетевой протокол будет гарантировать, что ваш поток идет в правильном порядке и без пропущенных частей. Следовательно, простейший поток чтения будет наиболее эффективным. Если вы хотите использовать параллельные маршруты и играть с дейтаграммами. Если файл большой, вам придется передавать и получать его порциями. Но IP-потоки могут скрыть это от вас.

Например: https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.getstream?view=netframework-4.7.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...