Accessing local system ( File Browser )

How to access a file from local system using Application. For example how can i access a photo from my system for uploading .

The Application class does not have a way of loading files from the local file system. Instead you could use the WWW class with the file:// protocol in a coroutine like this:

public IEnumerator LoadImageFromLocalFile()
{
    WWW www = new WWW("file://" + pathToLocalFileWithExtension);
    yield return www;
    
    Texture2D texture = www.texture;
}

Keep in mind that the image must be either .png or .jpg.

More on the WWW class here: WWW

i’ve got the solution. I got a free plugin for file browser . C# File Browser in Asset Store.
The code is

		#define thread //comment out this line if you would like to disable multi-threaded search
		using UnityEngine;
		using System.Collections;
		using System.IO;
		using System.Collections.Generic;

		#if thread
		using System.Threading;
		#endif

		public class FileBrowser{
		//public 
			//Optional Parameters
			public string name = "File Browser"; //Just a name to identify the file browser with
			//GUI Options
			public GUISkin guiSkin; //The GUISkin to use
			public int layoutType{	get{	return layout;	}	} //returns the current Layout type
			public Texture2D fileTexture,directoryTexture,backTexture,driveTexture; //textures used to represent file types
			public GUIStyle backStyle,cancelStyle,selectStyle; //styles used for specific buttons
			public Color selectedColor = new Color(0.5f,0.5f,0.9f); //the color of the selected file
			public bool isVisible{	get{	return visible;	}	} //check if the file browser is currently visible
			//File Options

			//Output
			public FileInfo outputFile; //the selected output file
			//Search
			public bool showSearch = false; //show the search bar
			public bool searchRecursively = false; //search current folder and sub folders
		//Protected	
			//GUI
			protected Vector2 fileScroll=Vector2.zero,folderScroll=Vector2.zero,driveScroll=Vector2.zero;
			protected Color defaultColor;
			protected int layout;
			protected Rect guiSize;
			protected GUISkin oldSkin;
			protected bool visible = false;
			//Search
			protected string searchBarString = ""; //string used in search bar
			protected bool isSearching = false; //do not show the search bar if searching
			//File Information
			protected DirectoryInfo currentDirectory;
			protected FileInformation[] files;
			protected DirectoryInformation[] directories,drives;
			protected DirectoryInformation parentDir;
			protected bool getFiles = true,showDrives=false;
			protected int selectedFile = -1;
			//Threading
			protected float startSearchTime = 0f;
			#if thread
			protected Thread t;
			#endif
			
			//Constructors
			public FileBrowser(string directory,int layoutStyle,Rect guiRect){	currentDirectory = new DirectoryInfo(directory);	layout = layoutStyle;	guiSize = guiRect;	}
			#if (UNITY_IPHONE || UNITY_ANDROID || UNITY_BLACKBERRY || UNITY_WP8)
			public FileBrowser(string directory,int layoutStyle):this(directory,layoutStyle,new Rect(0,0,Screen.width,Screen.height)){}

				public FileBrowser(string directory):this(directory,1){}
			#else
				public FileBrowser(string directory,int layoutStyle):this(directory,layoutStyle,new Rect(0,0,Screen.width,Screen.height)){}
			//public FileBrowser(string directory,int layoutStyle):this(directory,layoutStyle,new Rect(Screen.width*0.125f,Screen.height*0.125f,Screen.width*0.75f,Screen.height*0.75f)){}
				public FileBrowser(string directory):this(directory,0){}
			#endif
			public FileBrowser(Rect guiRect):this(){	guiSize = guiRect;	}
			public FileBrowser(int layoutStyle):this(Directory.GetCurrentDirectory(),layoutStyle){}
			public FileBrowser():this(Directory.GetCurrentDirectory()){}
			
			//set variables
			public void setDirectory(string dir){	currentDirectory=new DirectoryInfo(dir);	}
			public void setLayout(int l){	layout=l;	}
			public void setGUIRect(Rect r){	guiSize=r;	}
			
			
			//gui function to be called during OnGUI
			public bool draw(){
				if(getFiles){
					getFileList(currentDirectory); 
					getFiles=false;
				}
				if(guiSkin){
					oldSkin = GUI.skin;
					GUI.skin = guiSkin;
				}
				GUILayout.BeginArea(guiSize);
				GUILayout.BeginVertical("box");
				switch(layout){
					case 0:
						GUILayout.BeginHorizontal("box");
							GUILayout.FlexibleSpace();
							GUILayout.Label(currentDirectory.FullName);
							GUILayout.FlexibleSpace();
		//					if(showSearch){
		//						drawSearchField();
		//						GUILayout.Space(10);
		//					}
						GUILayout.EndHorizontal();
						GUILayout.BeginHorizontal("box");
							GUILayout.BeginVertical(GUILayout.MaxWidth(300));
							
								folderScroll = GUILayout.BeginScrollView(folderScroll);
								if(showDrives){
									foreach(DirectoryInformation di in drives){
										if(di.button()){	getFileList(di.di);	}
									}
								}else{
									if((backStyle != null)?parentDir.button(backStyle):parentDir.button())
										getFileList(parentDir.di);
								}
								foreach(DirectoryInformation di in directories){
									if(di.button()){	getFileList(di.di);	}
								}
								GUILayout.EndScrollView();
							GUILayout.EndVertical();
							GUILayout.BeginVertical("box");
								if(isSearching){
									drawSearchMessage();
								}else{
									fileScroll = GUILayout.BeginScrollView(fileScroll);
									for(int fi=0;fi<files.Length;fi++){
										if(selectedFile==fi){

											defaultColor = GUI.color;
											GUI.color = selectedColor;
										}
										if(files[fi].button()){
											outputFile = files[fi].fi;
											selectedFile = fi;
										}
										if(selectedFile==fi)
											GUI.color = defaultColor;
									}
									GUILayout.EndScrollView();
								}
								GUILayout.BeginHorizontal("box");
								GUILayout.FlexibleSpace();
					if((cancelStyle == null)?GUILayout.Button("Cancel"):GUILayout.Button("Cancel",cancelStyle)){  //
						outputFile = null;
									return true;
								}
								GUILayout.FlexibleSpace();
					if((selectStyle == null)?GUILayout.Button("Select"):GUILayout.Button("Select",selectStyle)){ c_global.fileFullName = currentDirectory.FullName ; return true;	}
								GUILayout.FlexibleSpace();
								GUILayout.EndHorizontal();
							GUILayout.EndVertical();
						GUILayout.EndHorizontal();
						break;
					case 1: //mobile preferred layout
					default:
						if(showSearch){
							GUILayout.BeginHorizontal("box");
								GUILayout.FlexibleSpace();
								GUILayout.Label(currentDirectory.Name);
								//drawSearchField();
								GUILayout.FlexibleSpace();
							GUILayout.EndHorizontal();
						}
						fileScroll = GUILayout.BeginScrollView(fileScroll);
						
						if(isSearching){
							drawSearchMessage();
						}else{
							if(showDrives){
								GUILayout.BeginHorizontal();
							GUILayout.FlexibleSpace();
								foreach(DirectoryInformation di in drives){
									if(di.button()){	getFileList(di.di);	}
								}
							GUILayout.FlexibleSpace();
								GUILayout.EndHorizontal();
							}else{
								if((backStyle != null)?parentDir.button(backStyle):parentDir.button())
									getFileList(parentDir.di);
							}
							
							
							foreach(DirectoryInformation di in directories){

								if(di.button()){	getFileList(di.di);	}
							}
							for(int fi=0;fi<files.Length;fi++){
								if(selectedFile==fi){
									defaultColor = GUI.color;
									GUI.color = selectedColor;
								}
								if(files[fi].button()){
									outputFile = files[fi].fi;
									selectedFile = fi;
								}
								if(selectedFile==fi)
									GUI.color = defaultColor;
							}
						}
						GUILayout.EndScrollView();

					GUILayout.BeginHorizontal("box");
					GUILayout.FlexibleSpace();
					if((cancelStyle == null)?GUILayout.Button("Cancel"):GUILayout.Button("Cancel",cancelStyle)){  //
						outputFile = null;
						return true;
					}
					GUILayout.FlexibleSpace();
					if((selectStyle == null)?GUILayout.Button("Select"):GUILayout.Button("Select",selectStyle)){c_global.fileFullName = currentDirectory.FullName ;	return true;	}
					GUILayout.FlexibleSpace();
					GUILayout.EndHorizontal();

		//			if((selectStyle == null)?GUILayout.Button("Select"):GUILayout.Button("Select",selectStyle)){	return true;	}
		//			GUILayout.FlexibleSpace();
		//			if((cancelStyle == null)?GUILayout.Button("Cancel"):GUILayout.Button("Cancel",cancelStyle)){
		//					outputFile = null;
		//					return true;
		//				}
		//
				break;
				}
				GUILayout.EndVertical();
				GUILayout.EndArea();
				if(guiSkin){GUI.skin = oldSkin;}
				return false;
			}
			
			protected void drawSearchField(){
				if(isSearching){
					GUILayout.Label("Searching For: \""+searchBarString+"\"");
				}else{
					searchBarString = GUILayout.TextField(searchBarString,GUILayout.MinWidth(150));
					if(GUILayout.Button("search")){
						if(searchBarString.Length > 0){
							isSearching = true;
							#if thread
							startSearchTime = Time.time;
							t = new Thread(threadSearchFileList);
							t.Start(true);
							#else
							searchFileList(currentDirectory);
							#endif
						}else{
							getFileList(currentDirectory);

						}
					}
				}
			}
			
			protected void drawSearchMessage(){
				float tt = Time.time-startSearchTime;
				if(tt>1)
					GUILayout.Button("Searching");
				if(tt>2)
					GUILayout.Button("For");
				if(tt>3)
					GUILayout.Button("\""+searchBarString+"\"");
				if(tt>4)
					GUILayout.Button(".....");
				if(tt>5)
					GUILayout.Button("It's");
				if(tt>6)
					GUILayout.Button("Taking");
				if(tt>7)
					GUILayout.Button("A");
				if(tt>8)
					GUILayout.Button("While");
				if(tt>9)
					GUILayout.Button(".....");
			}
			
			public void getFileList(DirectoryInfo di){
				//set current directory
				currentDirectory = di;
				//get parent
				if(backTexture)
					parentDir = (di.Parent==null)?new DirectoryInformation(di,backTexture):new DirectoryInformation(di.Parent,backTexture);
				else
					parentDir = (di.Parent==null)?new DirectoryInformation(di):new DirectoryInformation(di.Parent);
				showDrives = di.Parent==null;

				//get drives
				string[] drvs = System.IO.Directory.GetLogicalDrives();
				drives = new DirectoryInformation[drvs.Length];
				for(int v=0;v<drvs.Length;v++){
					drives[v]= (driveTexture==null)?new DirectoryInformation(new DirectoryInfo(drvs[v])):new DirectoryInformation(new DirectoryInfo(drvs[v]),driveTexture);
				}
				
				//get directories
				DirectoryInfo[] dia = di.GetDirectories();
				directories = new DirectoryInformation[dia.Length];
				for(int d=0;d<dia.Length;d++){
					if(directoryTexture)
						directories[d] = new DirectoryInformation(dia[d],directoryTexture);
					else
						directories[d] = new DirectoryInformation(dia[d]);
				}

				FileInfo [] f1 = di.GetFiles ("*.jpg");
				FileInfo [] f2 = di.GetFiles ("*.jpeg");
				FileInfo [] f3 = di.GetFiles ("*.png");

				int len1 = f1.Length;
				int len2 = f2.Length;
				int len3 = f3.Length;

				int tot = len1+len2+len3 ;

				FileInfo[] f4 = new FileInfo[tot];
				int xx =0;

				foreach(FileInfo f in f1)
				{
					f4[xx] = f;
					xx++;
				}
				foreach(FileInfo f in f2)
				{
					f4[xx] = f;
					xx++;
				}
				foreach(FileInfo f in f3)
				{
					f4[xx] = f;
					xx++;
				}

			
				FileInfo[] fia = f4 ;//searchDirectory(di,searchPattern);

				files = new FileInformation[fia.Length];
				for(int f=0;f<fia.Length;f++){
				

					if(fileTexture)
						files[f] = new FileInformation(fia[f],fileTexture);
					else
						files[f] = new FileInformation(fia[f]);
				}
			}

			
			public void searchFileList(DirectoryInfo di){
				searchFileList(di,fileTexture!=null);
			}
			
			protected void searchFileList(DirectoryInfo di,bool hasTexture){
				//(searchBarString.IndexOf("*") >= 0)?searchBarString:"*"+searchBarString+"*"; //this allows for more intuitive searching for strings in file names
				FileInfo[] fia = di.GetFiles((searchBarString.IndexOf("*") >= 0)?searchBarString:"*"+searchBarString+"*",(searchRecursively)?SearchOption.AllDirectories:SearchOption.TopDirectoryOnly);
				files = new FileInformation[fia.Length];
				for(int f=0;f<fia.Length;f++){
					if(hasTexture)
						files[f] = new FileInformation(fia[f],fileTexture);
					else
						files[f] = new FileInformation(fia[f]);
				}
				#if thread
				#else
				isSearching = false;
				#endif
			}
			
			protected void threadSearchFileList(object hasTexture){
				searchFileList(currentDirectory,(bool)hasTexture);
				isSearching = false;
			}
			
			//search a directory by a search pattern, this is optionally recursive
			public static FileInfo[] searchDirectory(DirectoryInfo di,string sp,bool recursive){
				return di.GetFiles(sp,(recursive)?SearchOption.AllDirectories:SearchOption.TopDirectoryOnly);
			}
			public static FileInfo[] searchDirectory(DirectoryInfo di,string sp){
				return searchDirectory(di,sp,false);
			}
			
			public float brightness(Color c){	return	c.r*.3f+c.g*.59f+c.b*.11f;	}
			
			//to string
			public override string ToString(){
				return "Name: "+name+"

Visible: “+isVisible.ToString()+”
Directory: “+currentDirectory+”
Layout: “+layout.ToString()+”
GUI Size: “+guiSize.ToString()+”
Directories: “+directories.Length.ToString()+”
Files: "+files.Length.ToString();
}
}

		public class FileInformation{
			public FileInfo fi;
			public GUIContent gc;
			
			public FileInformation(FileInfo f){
				fi=f;
				gc = new GUIContent(fi.Name);
			}
			
			public FileInformation(FileInfo f,Texture2D img){
				fi = f;
				gc = new GUIContent(fi.Name,img);
			}

			public bool button(){return GUILayout.Button(gc);}
			public void label(){	GUILayout.Label(gc);	}
			public bool button(GUIStyle gs){return GUILayout.Button(gc,gs);}
			public void label(GUIStyle gs){	GUILayout.Label(gc,gs);	}
		}

		public class DirectoryInformation{
			public DirectoryInfo di;
			public GUIContent gc;
			
			public DirectoryInformation(DirectoryInfo d){
				di=d;
				gc = new GUIContent(d.Name);
			}
			
			public DirectoryInformation(DirectoryInfo d,Texture2D img){
				di=d;
				gc = new GUIContent(d.Name,img);
			}
			
			public bool button(){return GUILayout.Button(gc);}
			public void label(){	GUILayout.Label(gc);	}
			public bool button(GUIStyle gs){return GUILayout.Button(gc,gs);}
			public void label(GUIStyle gs){	GUILayout.Label(gc,gs);	}
		}

For Using this browser use folowing code

			using UnityEngine;
			using System.Collections;
			using System;
			using System.IO;

			public class testFileBrowser : MonoBehaviour {
			//skins and textures
			public GUISkin[] skins;
			public Texture2D file,folder,back,drive;

			string[] layoutTypes = {"Type 0","Type 1"};
			//initialize file browser

			FileBrowser fb = new FileBrowser();

			string output = "no file";

			private string  defaultFileDirectory =	"/sdcard/DCIM/Camera";
			//	private string  defaultFileDirectory2 =	"/sdcard/DCIM";
			//	private string  defaultFileDirectory3 = "/sdcard";
			//	private string  defaultFileDirectory4 = "/";

			// Use this for initialization
			void OnEnable () {
				//setup file browser style
				print("bbhbh");
				fb.guiSkin = skins[0]; //set the starting skin

				if(Directory.Exists(defaultFileDirectory) )
				{
					fb.setDirectory(defaultFileDirectory);
				}
			//		else if(Directory.Exists(defaultFileDirectory2) )
			//		{
			//			fb.setDirectory(defaultFileDirectory2);
			//		}
			//		else if(Directory.Exists(defaultFileDirectory3) )
			//		{
			//			fb.setDirectory(defaultFileDirectory3);
			//		}
			//		else
			//		{
			//			fb.setDirectory(defaultFileDirectory4);
			//		}

				//set the various textures
				//fb.searchFileList((DirectoryInformation)defaultFileDirectory);
				fb.fileTexture = file; 
				fb.directoryTexture = folder;
				fb.backTexture = back;
				fb.driveTexture = drive;
				//show the search bar
				fb.showSearch = true;
				//search recursively (setting recursive search may cause a long delay)
				fb.searchRecursively = true;
			}

			void Update()
			{

			}
			void OnGUI(){

																//draw and display output
				if(fb.draw()){ //true is returned when a file has been selected
															//the output file is a member if the FileInfo class, if cancel was selected the value is null

					output = (fb.outputFile==null)?"":fb.outputFile.ToString();

					if(fb.outputFile !=null )
					{
						float fSize = fb.outputFile.Length ;
						print("File Size :"+fSize   );

							#if UNITY_EDITOR
								c_global.fileFullName= fb.outputFile.ToString ();
							#else 
					
							//c_global.fileFullName ="\\"+fb.outputFile.FullName.ToString ();;
						c_global.fileFullName =fb.outputFile.FullName.ToString ();;

							#endif 

					}
					else
					{
						c_global.fileFullName ="";
					}
					c_global.isFileBrowserHide = true; 
				
				}
			}

				

			}