2012-01-24 1 views
7

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

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

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

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

+0

Кто-то написал способ портировать файлы. Я попытаюсь отследить его, чтобы ответить на вопрос. –

ответ

4

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

В случае, если кто-то заинтересован, источник доступен here.

+0

Я думаю, что код сдвинулся. Не могли бы вы обновить ссылку, чтобы указать на определенную строку фиксации? –

+0

Начиная с 2015 года, похоже, что [правильно потоковая передача тела] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), в частности в ['WriteMultipartFormData'] (https://github.com/restsharp/RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs#L390) – drzaus

4

Использование перегрузки AddFile(name, writer, filename).

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

Here's an example for writing to the stream.

+4

Нет выхода, тело всегда загружается в память -> https://github.com/restsharp/RestSharp/blob/master/RestSharp/RestClient.cs#L433 –

+0

С 2015 года похоже, что это [правильно потоковая передача тела] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), в частности, в ['WriteMultipartFormData'] (https://github.com/restsharp/ RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs # L390) – drzaus

 Смежные вопросы

  • Нет связанных вопросов^_^