RestSharp загрузить файл без заполнения оперативной памяти - PullRequest
0 голосов
/ 08 июля 2019

На этот вопрос пока нет ответа в переполнении стека, и он не дублируется

У меня есть такой код, попробуйте загрузить файлы с помощью библиотеки RestSharp.

Проблема:
Но проблема в том, что загрузка файлов заполняет память (ОЗУ) , и это плохо или возникла ошибка на больших файлах .

var client = new RestClient("https://example.com/api/");
var request = new RestRequest("file/upload", Method.POST);
string filePath = @"C:\LargeFile.mkv";

client.ConfigureWebRequest(x => x.AllowWriteStreamBuffering = true);

request.AddHeader("Content-Type", "multipart/form-data");

request.AddParameter("access_token", "exampleToken");

request.AddFileBytes("upload_file", File.ReadAllBytes(filePath), Path.GetFileName(filePath), MimeMapping.GetMimeMapping(filePath));

client.ExecuteAsync(request, response =>
{
    Console.WriteLine(response.Content);
});

Примечание: Я не нахожу работающего способа сделать это без заполнения ОЗУ, я знаю, что он должен использовать типы потоков или байтовые массивы, но я не могу этого сделать.

1 Ответ

0 голосов
/ 12 июля 2019

Вам необходимо использовать перегрузку AddFile, которая принимает обратный вызов потоковой записи:

IRestRequest AddFile(string name, Action<Stream> writer, string fileName, long contentLength, string contentType = null);

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

При использовании средства записи потока ваша функция будет вызываться с потоком файла запроса, поэтому вы можете просто написатьв режиме реального времени без предварительной загрузки файла в память.

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