首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpWebRequest & UploadProgressChanged?

HttpWebRequest & UploadProgressChanged?
EN

Stack Overflow用户
提问于 2010-08-08 08:15:25
回答 1查看 1.2K关注 0票数 1

如何使用HttpWebRequest.BeginGetResponse和获取POST方法上传的进度更改事件?

我现在拥有的代码的一部分是:

代码语言:javascript
复制
HttpWebRequest req = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(uploadUri);

req.Method = "POST";
req.ContentType = "multipart/form-data; boundary=" + boundary + "";

req.ContentLength = dataBuffer.Length;

req.AllowReadStreamBuffering = false;
req.AllowWriteStreamBuffering = false;

DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
    ProgressText = "Waiting for request stream...";
});

req.BeginGetRequestStream(new AsyncCallback(GotRequestStreamForUpload), new SendPhotoAsyncState(req, dataBuffer, photo));

对BeginGetResponse的调用:

代码语言:javascript
复制
request.BeginGetResponse(new AsyncCallback(GotResponseStreamForUpload), new SendPhotoAsyncState(request, null, flickRPhoto));

我如何告诉请求我想要得到流中的更改的通知?

我希望能够根据照片上传的进度更新用户界面...

以下代码不适用于WebClient:

代码语言:javascript
复制
       WebClient wc = new WebClient();

        wc.UploadStringCompleted += (s, e) =>
            {
                // What photo is this ?
                FlickRUploadPhoto fup = ((SendPhotoAsyncState)e.UserState).FlickrPhoto2Upload;
                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                {
                    fup.tCompleted = DateTime.Now;
                    FileUploadComplete(this, new FlickRUploadCompleteEventArgs(fup));
                });

            };

        wc.UploadProgressChanged += (s2,e2) =>
            {

                // Was there an error ?

                // What photo is this ?
                FlickRUploadPhoto fup = ((SendPhotoAsyncState)e2.UserState).FlickrPhoto2Upload;
                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        fup.ProgressPercentage = e2.ProgressPercentage;
                        fup.ProgressPercentageString = e2.ProgressPercentage.ToString() + "%";
                        fup.BytesUploaded = e2.BytesSent;
                    });
            };


        string data = dataBuffer.ToString();
        wc.UploadStringAsync(uploadUri, "POST", data , new SendPhotoAsyncState(null, dataBuffer, photo));

这是Silverlight。所以我必须使用UploadStringAsync ??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-08 08:27:23

你不能用HttpWebRequest做到这一点,但你可以用WebClient做到:

代码语言:javascript
复制
    public void Upload(string targetUri, string filePath)
    {
        WebClient client = new WebClient();
        client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);
        client.UploadFile(targetUri, filePath);
    }

如果没有本地文件,则为UploadData:

代码语言:javascript
复制
public void Upload(string targetUri, byte[] buffer)
    {
        WebClient client = new WebClient();
        client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);
        client.UploadData(targetUri, buffer);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3432564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档