Saltar al contenido

¿Cómo descargar la imagen y guardarla en el almacenamiento local usando Xamarin-Forms.?

Solución:

Crear una interfaz FileService

en su código compartido, cree una nueva interfaz, por ejemplo, llamada IFileService.cs

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

Implementación Android

En su proyecto de Android, cree una nueva clase llamada “Fileservice.cs”.

Asegúrese de que se derive de su interfaz creada antes y decórelo con la información de dependencia:

[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);
            }
        }
    }
}

Implementación iOS
La implementación para iOS es básicamente la misma:

[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);
            }
        }
    }
}

Para guardar su archivo, en su código compartido, llame

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

y debería estar listo para empezar.

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("https://foroayuda.es/");
        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);
}

Aquí debe usar el servicio de dependencia de xamarin forms PCL para llamar a este método desde el proyecto de Android. Esto almacenará su imagen en la carpeta pública. Editaré esto si tengo tiempo para hacer una demostración con iOS también.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *