Nano Hash - криптовалюты, майнинг, программирование

Скачать файл с индикатором выполнения в Xamarin Forms

Я пытаюсь создать страницу загрузки в 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



Ответы:


1

Фактически вы копируете содержимое файла в свой buffer внутри цикла for. Объединяйте содержимое buffer при каждом запуске этого цикла в новый byte[] fileContentBuffer, и вы получаете доступ к содержимому, которое можно сохранить в локальном хранилище.

18.08.2015

2

Подумайте свою статью, я тоже решил скачать файл

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

19.07.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..