如何从Windows 8.1 Universal App中的Http Client获取下载/上传状态(以%为单位)?

时间:2015-05-20 06:08:15

标签: windows-phone-8.1 windows-8.1 win-universal-app

我有一个规范,其中需要忽略HTTPS证书并获取上传/下载的状态。

我使用HttpClient忽略证书,但我找不到获取下载/上传状态的方法。

我知道它存在于WebClient Windows Phone 8和Windows 1.1中没有Webclient。

所以请指导我完成这两件事。

1 个答案:

答案 0 :(得分:1)

对于下载进度,您可以从Http请求返回响应流,并可以使用以下代码写入文件,该文件也显示进度状态

 IInputStream inputStream = null;
            IRandomAccessStream fs = null;
            try
            {
                inputStream = responseStream.AsInputStream();
                ulong totalBytesRead = 0;
                fs = await file.OpenAsync(FileAccessMode.ReadWrite);
                ulong fileSize = Convert.ToUInt64(Size);

                while (true)
                {
                    // Read from the web.
                    if (!cancellationToken.IsCancellationRequested)
                    {
                        IBuffer buffer = new Windows.Storage.Streams.Buffer(512);
                        buffer = await inputStream.ReadAsync(
                           buffer,
                           buffer.Capacity,
                           InputStreamOptions.None);

                        if (buffer.Length == 0)
                        {
                            // There is nothing else to read.
                            break;
                        }


                        // Report progress.

                        totalBytesRead += buffer.Length;

                        double progress = ((double)totalBytesRead / fileSize);
                        double Value = progress * 100;

                        System.Diagnostics.Debug.WriteLine("Bytes read: {0}", totalBytesRead);

                        await fs.WriteAsync(buffer);

                    }
                    else
                    {
                        inputStream.Dispose();
                        fs.Dispose();

                        await file.DeleteAsync();
                        break;
                    }
                }

                inputStream.Dispose();
                fs.Dispose();


        }
        catch
        {
        }

对于上传进度,没有内置支持来执行此操作,但您可以使用 在System.Net.Http.Handler中找到ProgressMessageHandler ,您可以在Nuget上找到它,然后将其挂钩到您的HttpClient对象。