Как скачать изображение и сохранить его в локальном хранилище с помощью Xamarin-Forms.? - PullRequest
0 голосов
/ 26 июня 2018

Я хочу загрузить изображение и сохранить его в определенной папке в локальном хранилище.

Я использую это для загрузки изображения:

var imageData = await AzureStorage.GetFileAsync(ContainerType.Image, uploadedFilename);
var img = ImageSource.FromStream(() => new MemoryStream(imageData));

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Создайте интерфейс FileService

в вашем общем коде, создайте новый интерфейс, например, с именем IFileService.cs

 public interface IFileService
 {
      void SavePicture(string name, Stream data, string location="temp");
 }

Реализация Android

В своем проекте Android создайте новый класс с именем «Fileservice.cs».

Убедитесь, что он является производным от вашего интерфейса, созданного ранее, и украсьте его информацией о зависимостях:

[assembly: Dependency(typeof(FileService))]
namespace MyApp.Droid
{
    public class FileService : IFileService
    {
        public void SavePicture(string name, Stream data, string location = "temp")
        {
            var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            documentsPath = Path.Combine(documentsPath, "Orders", location);
            Directory.CreateDirectory(documentsPath);

            string filePath = Path.Combine(documentsPath, name);

            byte[] bArray = new byte[data.Length];
            using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
            {
                using (data)
                {
                    data.Read(bArray, 0, (int)data.Length);
                }
                int length = bArray.Length;
                fs.Write(bArray, 0, length);
            }
        }
    }
}

Реализация iOS Реализация для iOS в основном такая же:

[assembly: Dependency(typeof(FileService))]
namespace MyApp.iOS
{
    public class FileService: IFileService
    {
        public void SavePicture(string name, Stream data, string location = "temp")
        {
            var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            documentsPath = Path.Combine(documentsPath, "Orders", location);
            Directory.CreateDirectory(documentsPath);

            string filePath = Path.Combine(documentsPath, name);

            byte[] bArray = new byte[data.Length];
            using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
            {
                using (data)
                {
                    data.Read(bArray, 0, (int)data.Length);
                }
                int length = bArray.Length;
                fs.Write(bArray, 0, length);
            }
        }
    }
}

Чтобы сохранить свой файл, в своем общем коде вы звоните

DependencyService.Get<FileService>().SavePicture("ImageName.jpg", imageData, "imagesFolder");

и должно быть хорошо идти.

0 голосов
/ 26 июня 2018
public void DownloadImage(string URL)
{
    var webClient = new WebClient();
    webClient.DownloadDataCompleted += (s, e) =>
    {
        byte[] bytes = new byte[e.Result.Length];
        bytes=e.Result; // get the downloaded data
        string documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;

        var partedURL = URL.Split('/');
        string localFilename = partedURL[partedURL.Length-1];
        string localPath = System.IO.Path.Combine(documentsPath, localFilename);
        File.WriteAllBytes(localPath, bytes); // writes to local storage
        Application.Current.MainPage.IsBusy = false;
        Application.Current.MainPage.DisplayAlert("Download", "Download Finished", "OK");
        MediaScannerConnection.ScanFile(Forms.Context,new string[] { localPath }, null, null);
    };
    var url = new Uri(URL);
    webClient.DownloadDataAsync(url);
}

Здесь вы должны использовать службу зависимостей из форм xamarin PCL для вызова этого метода из проекта Android. Это сохранит ваше изображение в общей папке. Отредактирую это, если у меня будет время сделать демо с iOS тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...