我正在尝试使用WebClient.UploadFile将文件上传到HTTP网址。对于1M,2M等小文件,上传成功。但是对于像12M这样的大文件,我得到了这个例外:
The request was aborted: The request was canceled.
之前有没有人遇到过这个问题,你能分享一下这个问题吗?
答案 0 :(得分:7)
这是smwikipedia的回答中提到的解决方案。我已经添加了禁用写入流缓冲的功能,这可以帮助解决内存不足的问题。
public class ExtendedWebClient : WebClient
{
public int Timeout { get; set; }
public new bool AllowWriteStreamBuffering { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request != null)
{
request.Timeout = Timeout;
var httpRequest = request as HttpWebRequest;
if (httpRequest != null)
{
httpRequest.AllowWriteStreamBuffering = AllowWriteStreamBuffering;
}
}
return request;
}
public ExtendedWebClient()
{
Timeout = 100000; // the standard HTTP Request Timeout default
}
}
用法:
var webClient = new ExtendedWebClient();
webClient.Timeout = Timeout.Infinite;
webClient.AllowWriteStreamBuffering = false;
webClient.UploadFile(url, filePath);
答案 1 :(得分:0)
我按照这里解决了它: Extend the timeout value of WebClient
顺便说一下,由于WebClient的缓冲导致OutOfMemory异常: Are you getting OutOfMemoryExceptions when uploading large files?