我已经在谷歌上搜索了一段时间没有运气。似乎许多其他人也遇到过这个问题,但那些似乎没有解释他们是如何解决的。我尝试应用其他人建议的所有内容(AllowWriteStreamBuffering、SendChunked),但仍然无法使其正常工作。
如果我使用 30MB 的 _data 集运行以下代码,则 using(reqStream) 块中的代码会在几分之一秒内执行,然后它会停在 request.GetResponse 行上,它似乎在执行上传。
我希望它在写入时上传块,以便我可以显示已上传了多少数据,以显示进度。
我究竟做错了什么?
static void Upload(string _url, Byte[] _data)
{
try
{
var request = WebRequest.Create(_url) as HttpWebRequest;
request.Method = "PUT";
request.ContentType = @"application/x-www-form-urlencoded";
request.ContentLength = _data.Length;
request.AllowWriteStreamBuffering = false;
request.SendChunked = true;
using (var reqStream = request.GetRequestStream())
{
var bytesWritten = 0;
while (bytesWritten != _data.Length)
{
var amountToWrite = Math.Min(1000000, _data.Length - bytesWritten);
reqStream.Write(_data, bytesWritten, amountToWrite);
reqStream.Flush();
// report progress
bytesWritten += amountToWrite;
}
}
var response = request.GetResponse();
var resStream = response.GetResponseStream();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}