【问题标题】:HTTP upload progressHTTP 上传进度
【发布时间】:2015-07-12 17:37:49
【问题描述】:

我正在将一些表单数据(包括文件)上传到网络服务器,并且需要跟踪上传进度。我通过将我的上传数据逐位复制到HttpWebRequest的请求流中并根据复制的字节数和总字节数更新进度条来做到这一点。根据另一个网站,这将缓冲所有内容,之后实际的网络传输需要更长的时间。我应该设置request.AllowWriteStreamBuffering = false; 以防止缓冲。不幸的是,当我这样做时,request.GetResponse() 方法会永远阻塞。

这里有一些示例代码:

HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(uri);
request.AllowAutoRedirect = false;
request.Method = "POST";
request.ContentType = "multipart/form-data; boundary=" + multipartBoundary;
Stream reqStream = request.GetRequestStream();
request.AllowWriteStreamBuffering = false;
postStream.Seek(0, SeekOrigin.Begin);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) > 0)
{
    reqStream.Write(buffer, 0, bytesRead);
    int percentage = (int) (postStream.Position * 100 / postStream.Length);
    backgroundWorker.ReportProgress(percentage);
}
reqStream.Close();
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

当我不设置AllowWriteStreamBuffering 时,一切正常。这里有什么问题?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    问题是设置AllowWriteStreamBuffering 太晚了。这工作正常:

    HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(uri);
    request.AllowWriteStreamBuffering = false;
    request.SendChunked = true;
    request.AllowAutoRedirect = false;
    request.Method = "POST";
    ...
    

    通过提前设置AllowWriteStreamBuffering,它还告诉我一个例外,我必须设置SendChunked或指定内容长度(我现在手头没有)。

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 2012-04-08
      • 1970-01-01
      • 2021-05-21
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2011-03-13
      相关资源
      最近更新 更多