RestSharp загружает весь файл в память при загрузке. Как этого избежать?

Я использую RestSharp в проекте Mono для загрузки некоторых файлов и заметил, что при загрузке большого файла память существенно увеличивается.

Глядя на исходный код RestSharp, я заметил что FileParameter ожидает массив байтов, что означает, что он действительно загружает файл в память.

Я делаю что-то неправильно? Есть ли способ для RestSharp не делать этого? Я могу загружать очень большие файлы, поэтому загружать их из памяти не вариант.

Любая помощь (включая указание мне использовать другую библиотеку HTTP, доступную в моно) приветствуется.


person Maurício Linhares    schedule 24.01.2012    source источник
comment
Кто-то написал способ потоковой передачи файлов. Я попытаюсь найти его, чтобы ответить на вопрос.   -  person John Sheehan    schedule 24.01.2012


Ответы (2)


Используйте перегрузку AddFile(name, writer, filename).

Для параметра writer передайте Action<Stream>, который записывает непосредственно в поток тела запроса. Не закрывайте поток.

Вот пример записи в поток .

person John Sheehan    schedule 24.01.2012
comment
Выхода нет, тело всегда загружается в память -› github.com/restsharp/RestSharp/blob/master/RestSharp/ - person Maurício Linhares; 25.01.2012
comment
По состоянию на 2015 год, похоже, что он должным образом передает тело, особенно в WriteMultipartFormData - person drzaus; 14.07.2015
comment
Я пытался исправить неработающую ссылку, но я думаю, что они так сильно изменили API, что вызов, о котором вы говорите, больше не существует, теперь он оборачивает поток в AddFile(name, path), поэтому вам больше не нужно его предоставлять. Не уверен, что вы могли бы скорректировать свой ответ, так как это было так давно.... - person ForceMagic; 21.05.2020

И я сдался после того, как нашел эту строку, поэтому тела запросов всегда загружаются в память, что досадно, поэтому я создал простое решение для загрузки файлов на основе кода из этот вопрос и отладка библиотеки Apache HttpClient.

Если кому-то интересно, источник доступен здесь.

person Maurício Linhares    schedule 25.01.2012
comment
Я думаю, что код изменился. Не могли бы вы обновить ссылку, чтобы она указывала на конкретную фиксацию + номер строки? - person Gary Johnson; 24.04.2015
comment
По состоянию на 2015 год, похоже, что он должным образом передает тело, особенно в WriteMultipartFormData - person drzaus; 14.07.2015
comment
Как и в остальной части темы, я попытался исправить ссылку, но если бы вы могли дважды проверить, что ваш ответ все еще действителен, я не уверен. - person ForceMagic; 21.05.2020