- Home /
The question is answered, right answer was accepted
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 .
Application class won't help you in this case. To access local files you have to use other classes like WWW or standard .NET classes like File, BinaryReader, etc.
Regarding uploading: please take a look at this answer from Bunny83
Answer by LijuDeveloper · Nov 20, 2014 at 04:52 AM
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+"\nVisible: "+isVisible.ToString()+"\nDirectory: "+currentDirectory+"\nLayout: "+layout.ToString()+"\nGUI Size: "+guiSize.ToString()+"\nDirectories: "+directories.Length.ToString()+"\nFiles: "+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; 
                 
                 }
             }
                 
             }
Answer by GameVortex · Nov 14, 2013 at 11:53 AM
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
Thanks to both the above answers. @LijuDeveloper's method needs @GameVortex's method to complete the process.
ImageFiles are not getting loaded on Android. Any reason? Am using www method.
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                