RestSharp上载没有填充RAM的文件

时间:2019-07-08 17:38:35

标签: c# post restsharp ram

  

此问题在Stack Overflow中尚未得到解答,并且没有重复

我有一个完全像这样的代码,请尝试使用RestSharp库上传文件。

问题:
但是问题是上传文件填充了内存(RAM),并且大文件不好或出现了错误。

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);
});

注意: 我不找到一种不填充RAM的可行方法,我知道它必须使用流类型或字节数组,但是我做不到。

1 个答案:

答案 0 :(得分:0)

您需要使用AddFile重载来接受流编写器回调:

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

它的一个缺点是必须明确指定文件大小,因为RestSharp无法提前知道要写入流的内容,并且文件大小必须包含在ContentLength请求标头中。 / p>

使用流编写器时,将与请求文件流一起调用您的函数,因此您可以实时对其进行写入,而无需先将文件加载到内存中。