我有一个Windows服务将从本地磁盘(视频文件)读取并通过API将它们发布到远程服务。
超过2GB大小的视频文件,我需要通过HttpClient / POST请求将它们传输到另一个位置。
API调用没有限制,所以即使文件是10gb,我仍然可以将文件发布到目的地。
现在我正在将整个视频文件作为byte [] fileContent读取并将其传递给函数
ByteArrayContent contentBody = new ByteArrayContent(fileContent);
它现在有效,但由于这不可扩展。 (如果同时传输多个文件,它可以填满内存)我正在寻找一种解决方案,传输将以块的形式发生。
问题:当我从本地磁盘读取时,我可以读缓冲区中的大文件并通过HTTP传输吗?
答案 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));
}
}