Introduction

Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
Prerequisites
  • Visual Studio 2017 or later (Windows or Mac)

Setting up a Xamarin.Forms Project

Start by creating a new Xamarin.Forms project. You wíll learn more by going through the steps yourself.
Create a new or existing Xamarin forms(.Net standard) Project with Android and iOS Platform.
Nuget
Install the following Nuget from Nuget Manager In your Visual Studio.
Name Xamarin.Plugin.FilePicker
Version 2.1.41
Url https://www.nuget.org/packages/Xamarin.Plugin.FilePicker/
Xamarin.Essentials
Xamarin.Essentials also supports File Picker but it's in Preview. Once the FilePicker is moved to stable you can update Xamarin.Pulgin.FilePicker to Xamarin.Essentials from here.
Setup UI
Now, I created a simple UI for file browser.
MainPage.xaml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="FileUploadPOC.MainPage">
  3. <StackLayout HorizontalOptions="Center">
  4. <!-- Place new controls here -->
  5. <Image Source="xamarinmonkeysbanner.png" HorizontalOptions="Center" Margin="0,100,0,0"/>
  6. <Button Margin="0,20,0,0" Text="Browse File" Clicked="Button_Clicked"></Button>
  7. <Label x:Name="lblName"/>
  8. <Label x:Name="lblFilePath"/>
  9. </StackLayout>
  10. </ContentPage>
File Browser
Below code is for file picker. Here we will get two values, FileName and FilePath.
  1. private async Task PickAndShow(string[] fileTypes)
  2. {
  3. try
  4. {
  5. var pickedFile = await CrossFilePicker.Current.PickFile(fileTypes);
  6. if (pickedFile != null)
  7. {
  8. lblName.Text = pickedFile.FileName;
  9. lblFilePath.Text = pickedFile.FilePath;
  10. }
  11. }
  12. catch (Exception ex)
  13. {
  14. }
  15. }
File Types
Note, you can define the file types for platform specific.
  1. if (Device.RuntimePlatform == Device.Android)
  2. {
  3. fileTypes = new string[] { "image/png", "image/jpeg" };
  4. }
  5. if (Device.RuntimePlatform == Device.iOS)
  6. {
  7. fileTypes = new string[] { "public.image" }; // same as iOS constant UTType.Image
  8. }
  9. if (Device.RuntimePlatform == Device.UWP)
  10. {
  11. fileTypes = new string[] { ".jpg", ".png" };
  12. }
  13. if (Device.RuntimePlatform == Device.WPF)
  14. {
  15. fileTypes = new string[] { "JPEG files (*.jpg)|*.jpg", "PNG files (*.png)|*.png" };
  16. }
Reference for other file types,
https://stackoverflow.com/questions/41797644/xamarin-ios-filtering-out-the-filetype-show-on-document-picker
MainPage.Xaml.cs
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Xamarin.Forms;
  8. using Plugin.FilePicker;
  9. using Xamarin.Essentials;
  10. using System.Security.Cryptography.X509Certificates;
  11. namespace FileUploadPOC
  12. {
  13. // Learn more about making custom code visible in the Xamarin.Forms previewer
  14. // by visiting https://aka.ms/xamarinforms-previewer
  15. [DesignTimeVisible(false)]
  16. public partial class MainPage : ContentPage
  17. {
  18. public MainPage()
  19. {
  20. InitializeComponent();
  21. }
  22. async void Button_Clicked(System.Object sender, System.EventArgs e)
  23. {
  24. try
  25. {
  26. string[] fileTypes = null;
  27. if (Device.RuntimePlatform == Device.iOS)
  28. {
  29. fileTypes = new string[] {"com.adobe.pdf", "public.rft", "com.microsoft.word.doc", "org.openxmlformats.wordprocessingml.document" }; }
  30. await PickAndShow(fileTypes);
  31. }
  32. catch (Exception ex)
  33. {
  34. }
  35. }
  36. private async Task PickAndShow(string[] fileTypes)
  37. {
  38. try
  39. {
  40. var pickedFile = await CrossFilePicker.Current.PickFile(fileTypes);
  41. if (pickedFile != null)
  42. {
  43. lblName.Text = pickedFile.FileName;
  44. lblFilePath.Text = pickedFile.FilePath;
  45. }
  46. }
  47. catch (Exception ex)
  48. {
  49. }
  50. }
  51. }
  52. }
Debug your App
Download source code here.
I hope you have understood how to browse files in your device and drive in Xamarin.Forms.
Thanks for reading. Please share your comments and feedback. Happy Coding :)