私は運が悪いので、しばらくの間これをグーグルで検索してきました。他にも多くの人がこの問題を抱えているようですが、解決方法を説明していないようです。他の人が提案したすべてのもの (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);
}
}