此问题在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的可行方法,我知道它必须使用流类型或字节数组,但是我做不到。
答案 0 :(得分:0)
您需要使用AddFile
重载来接受流编写器回调:
IRestRequest AddFile(string name, Action<Stream> writer, string fileName, long contentLength, string contentType = null);
它的一个缺点是必须明确指定文件大小,因为RestSharp无法提前知道要写入流的内容,并且文件大小必须包含在ContentLength
请求标头中。 / p>
使用流编写器时,将与请求文件流一起调用您的函数,因此您可以实时对其进行写入,而无需先将文件加载到内存中。