【发布时间】:2016-09-02 10:37:05
【问题描述】:
我正在尝试使用MultipartFormDataContent 在 HTTP POST 中发送一个大文件以及一些其他数据。为了分块发送文件,我使用PushStreamContent 将文件流中的数据块写入输出流,每次写入后刷新:
PushStreamContent pushStreamContent = new PushStreamContent((stream, content, context) => {
byte[] buffer = new byte[4096];
int bytesRead;
do {
bytesRead = fileStream.Read(buffer, 0, 4096);
stream.Write(buffer, 0, bytesRead);
stream.Flush();
}
while(bytesRead != 0);
stream.Close();
});
如果我使用以下代码发布此HttpContent,一切正常:
new HttpClient().PostAsync(destinationUrl, pushStreamContent);
但是,如果将此PushStreamContent 添加到MultipartFormDataContent,如下所示:
MultipartFormDataContent postForm = new MultipartFormDataContent {
{stringContent, "atom"},
{pushStreamContent, "binary"}
};
并且 已发布,然后我在 PushStreamContent 的 lambda 中收到 OutOfMemoryException。据推测,HttpClient 正在将MultipartFormDataContent 的整个 缓冲到内存中,由于请求内容非常大而失败。我希望客户推迟对包含的PushStreamContent 的刷新。这可能吗?我正在使用 .NET 4.5。
【问题讨论】:
标签: c# .net post multipartform-data dotnet-httpclient