gpt4 book ai didi

asynchronous - 在 Xamarin Forms 中下载带有进度条的文件

转载 作者:行者123 更新时间:2023-12-01 05:01:49 25 4
gpt4 key购买 nike

我正在尝试使用下载进度条在 Xamarin Forms(PCL,因此 WebClient 不可用)中制作下载页面。我使用了 Xamarin 的以下信息,但没有成功:

http://developer.xamarin.com/recipes/ios/network/web_requests/download_a_file/
http://developer.xamarin.com/recipes/cross-platform/networking/download_progress/

这是我当前的代码(带有工作进度条):

using System;
using System.Collections.Generic;

using Xamarin.Forms;
using System.Net.Http;
using System.IO;
using System.Threading.Tasks;

namespace DownloadExample
{
public partial class DownloadPage : ContentPage
{
public DownloadPage ()
{
InitializeComponent ();

DownloadFile("https://upload.wikimedia.org/wikipedia/commons/3/3d/LARGE_elevation.jpg");
}

private async Task<long> DownloadFile(string url)
{
long receivedBytes = 0;
long totalBytes = 0;
HttpClient client = new HttpClient ();

using (var stream = await client.GetStreamAsync(url)) {
byte[] buffer = new byte[4096];
totalBytes = stream.Length;

for (;;) {
int bytesRead = await stream.ReadAsync (buffer, 0, buffer.Length);
if (bytesRead == 0) {
await Task.Yield ();
break;
}

receivedBytes += bytesRead;

int received = unchecked((int)receivedBytes);
int total = unchecked((int)totalBytes);

double percentage = ((float) received) / total;

progressBar1.Progress = percentage;
}
}

return receivedBytes;
}
}
}

现在,我需要将文件保存到本地存储。但是,在此示例中,我没有获取文件内容,因此无法将其写入本地存储。我需要在代码中更改什么才能使这成为可能?

仅供引用:在这个例子中,我正在下载一个图像,但它将是一个 .pdf/.doc/.docx 的功能。

提前致谢。

BR、FG

最佳答案

想想你的文章,我也解决了下载文件

WebClient client = new WebClient();
using (var stream = await client.OpenReadTaskAsync(Download point))
{
using (MemoryStream ms = new MemoryStream())
{
var buffer = new byte[BufferSize];
int read = 0;
totalBytes = Int32.Parse(client.ResponseHeaders[HttpResponseHeader.ContentLength]);

while ((read = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);//important : receive every buffer
receivedBytes += read;
received = unchecked((int)receivedBytes);
total = unchecked((int)totalBytes);

percentage = ((float)received) / total;
progressBar1.Progress = percentage;
labProg.Text = AppResources.MsgDownloadprogress + Math.Truncate(percentage * 100).ToString() + "%";
}//END while
Stream ALLstream = new MemoryStream(ms.ToArray());//important change Stream
App.APK.GenApkFile(ALLstream);//change APK file and save memory of phone
}//END using (MemoryStream
stream.Close();
}//END using (var stream

关于asynchronous - 在 Xamarin Forms 中下载带有进度条的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com