As the definition of bfile : A BFILE is a data type used to store a locator (link) to an external binary file (file stored outside of the database).
To associate an operating system (OS) file to a BFILE, we need to create a DIRECTORY object which is an alias for the full path name to the operating system file. According to my understanding, the directory object can only create on the server side. So I would like to know, 1.whether we can insert bfile column value for the file which exists in remote client machine. 2.if bfile can only store the location of the file why we cannot use only string data type to store the path of the file instead of using bfile data type. Please correct me if my understanding about bfile is wrong.
Yes, you are right, the BFILE needs to be visible on the database server.
For your second question: If you declare the location of the file as a string, you cannot open the content of the BFILE and use for instance the package DBMS_LOB to extract data from it.