Я занимаюсь разработкой приложения Xamarin, которое получает информацию из БД, делает / выбирает фотографию и загружает ее на удаленный сервер, отображает эти изображения с удаленного сервера, и пользователь может удалить их, нажав на и нажав кнопку. Последний шаг - загрузка изображений, хранящихся на сервере, в локальную галерею устройств.
Это мое текущее событие нажатия кнопки:
private void button_download_image_Clicked(object sender, EventArgs e)
{
Uri image_url_format = new Uri(image_url);
WebClient webClient = new WebClient();
try
{
webClient.DownloadDataAsync(image_url_format);
webClient.DownloadDataCompleted += webClient_DownloadDataCompleted;
}
catch (Exception ex)
{
DisplayAlert("Error", ex.ToString(), "OK");
}
}
Ниже метода webClient_DownloadDataCompleted
:
private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
try
{
Uri image_url_format = new Uri(image_url);
byte[] bytes_image = e.Result;
Stream image_stream = new MemoryStream(bytes_image);
string dest_folder= Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString();
string file_name= Path.GetFileName(image_url_format.LocalPath);
string dest_path= Path.Combine(dest_folder, file_name);
using (var fileStream = new FileStream(dest_path, FileMode.Create, FileAccess.Write))
{
image_stream.CopyTo(fileStream);
}
DisplayAlert("Alert", "Download completed!", "OK");
}
catch (Exception ex)
{
DisplayAlert("Error", ex.ToString(), "OK");
}
}
Но это не работает, ошибки не обнаружены, я получаю предупреждение, которое предупреждает меня, что загрузка завершена. Также я дал разрешение на inte rnet, write_external_storage и read_external_storage .
Другое дело, что изображения через некоторое время появляются в галерея под Скачать альбом, который является правильным.
Есть идеи об этом поведении?
РЕДАКТИРОВАТЬ
Ниже моей новой кнопки событие загрузки:
private void button_download_image_Clicked(object sender, EventArgs e)
{
Uri image_url_format = new Uri(image_url);
WebClient webClient = new WebClient();
try
{
byte[] bytes_image = webClient.DownloadData(image_url_format);
Stream image_stream = new MemoryStream(bytes_image);
string dest_folder = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString();
string file_name = Path.GetFileName(image_url_format.LocalPath);
string dest_path = Path.Combine(dest_folder, file_name);
using (var fileStream = new FileStream(dest_path, FileMode.Create, FileAccess.Write))
{
image_stream.CopyTo(fileStream);
}
}
catch (Exception ex)
{
DisplayAlert("Error", ex.ToString(), "OK");
}
DisplayAlert("Alert", "File scaricato con successo", "OK");
}