通过api与C#异步传输大文件

时间:2015-04-16 21:23:42

标签: c# post httpclient

我有一个Windows服务将从本地磁盘(视频文件)读取并通过API将它们发布到远程服务。

超过2GB大小的视频文件,我需要通过HttpClient / POST请求将它们传输到另一个位置。

API调用没有限制,所以即使文件是10gb,我仍然可以将文件发布到目的地。

现在我正在将整个视频文件作为byte [] fileContent读取并将其传递给函数

ByteArrayContent contentBody = new ByteArrayContent(fileContent);

它现在有效,但由于这不可扩展。 (如果同时传输多个文件,它可以填满内存)我正在寻找一种解决方案,传输将以块的形式发生。

问题:当我从本地磁盘读取时,我可以读缓冲区中的大文件并通过HTTP传输吗?

1 个答案:

答案 0 :(得分:2)

您可以使用HttpClient的PostAsync(Uri, HttpContent)方法。要流式传输本地文件的内容,请使用HttpContent的StreamContent子类并提供文件读取器流。一个简短的例子:

async Task PostBigFileAsync(Uri uri, string filename)
{
  using (var fileStream = File.OpenRead(filename))
  {
    var client = new HttpClient();
    var response = await client.PostAsync(uri, new StreamContent(fileStream));
  }
}
相关问题