I am developing a Xamarin app which retrives info from DB, take/choose photo and upload them to remote server, display this images from the remote server and the user can delete them by tap on and press a button. The final step is to download the images stored in the server to the local device gallery.
This is my current button click event:
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"); } }
Below the webClient_DownloadDataCompleted method:
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"); } }
But it does not work, no error caught, I get the alert which warn me that the download is completed. Also I gave permission for internet, write_external_storage and read_external_storage.
Another thing is that the images after some time, appears in the gallery under Download album which is correct.
Any idea about this behavior?