1

我已经在谷歌上搜索了一段时间没有运气。似乎许多其他人也遇到过这个问题,但那些似乎没有解释他们是如何解决的。我尝试应用其他人建议的所有内容(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);
        }
    }
4

0 回答 0