File upload on demand

A data processing system implements obtaining, at a file services platform, first mapping information by mapping files, folders, or a combination thereof stored on each of a plurality of client devices associated with a first user. The data processing system further implements synchronizing the first mapping information with the plurality of client devices, receiving a first request for a first file from a first client device of the plurality of client devices, where the first file stored locally on a second client device of the plurality of client devices. The data processing system further implements requesting that the second client device upload an instance of the first file to the file services platform; receiving the instance of the first file from the second client device; and causing the first client device to download the instance of the first file from the file services platform to the first client device.

BACKGROUND

Numerous file storage and management platforms exist for synchronizing files and folders on a client device with a cloud-based file storage platform for storing and managing access to the files and folders. The files and folders may be synchronized across multiple computing devices, including but not limited to desktop computers, laptop computers, tablet computers, mobile phones and/or other mobile devices, and/or other types of computing devices. The file storage and management platform typically synchronizes designated namespaces or folders with the storage of the cloud-based service and the one or more client devices. The file storage and management platform synchronizes a hierarchical mapping of content items stored in the designated namespaces or folders of each client device with a file storage maintained by the file storage platform to make these files and folders accessible from the various client devices permitted to access these files or folders. Currently, the hierarchical mapping of the namespace or folders is only synchronized to the cloud service from a particular client device when the client device synchronizes both hierarchical metadata and content data for the files and folders in the namespace. However, synchronizing the hierarchical mapping information among the client devices without having to also synchronize the associated files and folders can provide several benefits. These benefits include reducing upload bandwidth requirements for uploading content to the file and storage requirements on the file storage and management platform. Hence, there is a need for improved systems and methods that provide a technical solution for synchronizing hierarchical information among client devices without automatically synchronizing the files and folders.

SUMMARY

An example data processing system according to the disclosure may include a processor and a machine-readable medium storing executable instructions. The instructions when executed cause the processor to perform operations including obtaining, at a file services platform, first mapping information by mapping files, folders, or a combination thereof stored on each of a plurality of client devices associated with a first user, the file services platform being configured to selectively synchronize instances of the files, folders, or both among the plurality of client devices; synchronizing the first mapping information with the plurality of client devices; receiving a first request for a first file from a first client device of the plurality of client devices, the first file stored locally on a second client device of the plurality of client devices; requesting that the second client device upload an instance of the first file to the file services platform; receiving the instance of the first file from the second client device; and causing the first device to download the instance of the first file from the file services platform to the first client device.

An example data processing system according to the disclosure may include a processor and a machine-readable medium storing executable instructions. The instructions when executed cause the processor to perform operations including obtaining first mapping information, at a first client device, from a file services platform for files, folders, or a combination thereof stored on a plurality of other client devices associated with a first user; presenting the first mapping information on a user interface for managing the storage and download of files among the client devices and the file services platform the first client device, including presenting information indicating on which device each file or folder is located and synchronization information indicating whether each file or folder has been synchronized with the first client device, the file services platform, and one or more of the other client devices; receiving a signal from the user interface requesting a first file from the file services platform, wherein the first file is not synchronized with the file services platform but is stored on a second client device of the plurality of client devices; and receiving, from the file services platform, an instance of the first file obtained from the second client device.

An example method implemented in a data processing system for managing synchronization of file among a plurality of client devices and a file services platform includes obtaining, at a file services platform, first mapping information by mapping files, folders, or a combination thereof stored on each of a plurality of client devices associated with a first user, the file services platform being configured to selectively synchronize instances of the files, folders, or both among the plurality of client devices; synchronizing the first mapping information with the plurality of client devices; receiving a first request for a first file from a first client device of the plurality of client devices, the first file stored locally on a second client device of the plurality of client devices; requesting that the second client device upload an instance of the first file to the file services platform; receiving the instance of the first file from the second client device; and causing the first device to download the instance of the first file from the file services platform to the first client device.

DETAILED DESCRIPTION

Techniques for managing the synchronization of files and file information among client devices and a file storage platform are provided. These techniques address the technical problems associated with synchronizing files and/or folders among client devices and a file services platform by sharing topological information and/or metadata for files and/or folders stored on one or more client devices without requiring that the files and/or folders represented by this topological information also be synchronized with the client device. A user may gain access to the files and/or folders that have been mapped for each of the client devices without the need to synchronize the files and/or folder themselves with the file storage platform and/or the each of the individual client devices. A technical benefit is that this approach reduces the computing and/or storage resources of the file storage platform and/or the client devices by permitting users to request files that are stored on another client device to not be uploaded to the file services platform until requested. This approach can reduce the upload bandwidth requirements and file storage requirements for the customer, as well as reduce the memory and computing resources of the file services platform associated with uploading content to the file services platform and storing the content on the file services platform. Furthermore, the user may selectively upload files or folders to the file storage platform from each of the client devices as these files are folders needed rather than automatically synchronizing and storing copies of these files and folders with the file storage platform. The techniques herein permit the user to configure which files and/or folders are synchronized to which client devices and/or the file storage platform. The user may also browse the mapping of files and/or folders from any authorized client device to view information indicating which files and/or folders are stored on each of the client devices and the file services platform. The user may also instruct the file storage platform to obtain and provide a copy of specified files and/or folders that are stored on another client device or the file storage platform but have not been synchronized with the client device that the user is currently using. Consequently, the user has granular control over which content is available on any specific client device and/or from the file storage platform at any time. This approach not only provides an improved user experience by providing the user with the flexibility to access their files and/or folder on any of their client devices at any time, but also provides improved security and privacy considerations. These and other technical benefits of the techniques disclosed herein will be evident from the discussion of the example implementations that follow.

FIG.1is a diagram showing an example computing environment100in which the techniques disclosed herein for managing the synchronization of files and file information among client devices and a file storage platform may be implemented. The computing environment100may include a file services platform110. The example computing environment100may also include client devices105a,105b,105c, and105d(collectively referred to as client device105) and application services125. The client devices105a,105b,105c, and105dmay communicate with the file services platform110and/or the application service125via the network120. Furthermore, the application service125may communicate with the file services platform110via the network120. The network120may be a combination of one or more public and/or private networks and may be implemented at least in part by the Internet.

In the example shown inFIG.1, the file services platform110is implemented as a cloud-based service or set of services. The file services platform110is configured to store and manage the upload and download of files and folders to the client devices105a-105d. The file services platform110obtains the topological information and/or metadata for file and/or folders that are stored on the client devices105a-105dand shares the topological information and/or metadata with the client devices105a-105dwithout requiring that the files and/or folders represented by this topological information also be synchronized with the client devices105a-105d. In some implementations, the file services platform110provides the topological information and/or metadata to each of the client devices105a-105d. In other implementations, the topological information and/or metadata associated with each of the client devices105a-105dis stored on the file services platform110but the file services platform110provides means for users of the client devices105a-105dto browse the topological information and/or metadata stored on the file services platform110so that the user may determine where instances of a particular file or folder are being stored. This permits a user to browse the mapping of files and folders stored on each of the client devices105a-105dwithout requiring that the files and/or folders stored therein are synchronized with the file services platform110and/or the other client devices105. Furthermore, the user has flexible and granular control over where copies of the files and/or folders are stored and synchronized. Demonstrating how the user may control where their files are stored and synchronized is shown in the examples which follow. In some implementations, the file services platform110, or at least a portion of the functionality thereof, may be implemented by the application services125to provide file storage and/or management for users of the application services. In other implementations, the file services platform110, or at least a portion of the functionality thereof, may be implemented by a native application on the client devices105a,105b,105c, and105d.

The application service125provides cloud-based software and services that are accessible to users via the client devices105a,105b,105c, and105d. The application service125provides one or more software applications, including but not limited to communications platform and/or collaboration platform, a word processing application, a presentation design application, and/or other types of applications in which user may create and/or access electronic documents. The electronic documents may be stored on one or more of the file services platform110and the client devices105a-105d. The term “electronic document” as used herein can be representative of any document or component in electronic form that can be created by a computing device, stored in a machine-readable storage medium, and/or transferred among computing devices over a network connection or via a machine-readable storage medium. Examples of such electronic documents include but are not limited to word processing documents, presentations, websites (e.g., Microsoft SharePoint® sites), digital drawings, media files, components thereof, and the like.

The client devices105a,105b,105c, and105dare each a computing device that may be implemented as a portable electronic device, such as a mobile phone, a tablet computer, a laptop computer, a portable digital assistant device, a portable game console, and/or other such devices. The client devices105a,105b, and105cmay also be implemented in computing devices having other form factors, such as a desktop computer, vehicle onboard computing system, a kiosk, a point-of-sale system, a video game console, and/or other types of computing devices. While the example implementation illustrated inFIG.2includes four client devices, other implementations may include a different number of client devices105that may utilize the application service125and/or the file services platform110. Furthermore, in some implementations, the application functionality provided by the application service125may be implemented by a native application installed on the client devices105a,105b,105c, and105d, and the client devices105a,105b,105c, and105dmay communicate directly with the file services platform110over a network connection.

In the example implementation shown inFIG.1, each of the client devices105a,105b,105c, and105dis associated with the same user to more clearly illustrate the techniques herein. In this example implementation, the client device105ais a laptop computer, the client device105bis a desktop computer, the client device105cis a mobile phone, and the client device105dis a tablet computer105d. However, the user may be associated with a different number and/or different type or types of client devices in other implementations. In a typical implementation, the file services platform110provides file storage and management services to many users who are associated with one or more client devices105. Furthermore, in some implementations, the file services platform110facilitates synchronization of files among the devices of more than one user. For example, users within an organization or enterprise, within a family, or other groups of users may permit certain files and/or folders to be shared with other specified users and to be synchronized with one or more client devices105of the other users.

FIG.2is a diagram showing additional features of the file services platform110, the client device105, and the application service125. The file services platform110includes a request processing unit205, a file mapping unit210, a file transfer unit215, a file datastore220, an authentication unit225, and a user interface unit230.

The request processing unit205receives requests from a client device105or the application service125to upload or download one or more files or folders. An upload request indicates that the one or more files or folders are to be uploaded and stored in the file datastore220of the file services platform110and/or pushed out to one or more other client devices105. A download request indicates that one or more files or folders are to be downloaded from the file services platform110to the client device105. In some implementations, the download request indicates that the one or more files or folders are to be obtained from another client device105.

The request processing unit205may also receive requests to add a client device105. In such instances, the request processing unit205signals the file mapping unit210to map the topology of files and/or folders stored on the client device105. The file mapping unit210also collects metadata about these files in some implementations. In some implementations, the request processing unit205also signals the file transfer unit215to synchronize the files on the newly added client device105with the file datastore220of the file services platform110.

The file mapping unit210generates a mapping of content of the client devices105a-105d. The mapping includes topological information, such as but not limited to the directory structure of designated portions of the storage of the client devices105a-105d, and the files stored therein. The file mapping unit210also collects metadata associated with the files and/or folders when mapping the topological information. The file mapping unit210communicates with a native application or service on the client devices105a-105dto obtain the topological information and/or metadata from the client devices105a-105din some implementations. In such implementations, the file mapping unit210sends a request to the client devices105a-105das the client devices are added by the user. The file mapping unit210also periodically polls the client devices105a-105dto obtain updates to the topological information and/or metadata. Furthermore, in some implementations, the native applications and/or services on the client devices105a-105dmonitor the files and/or folders on the respective client device and sends updates to the topological information and/or metadata as changes to the files and/or folders are identified. The file mapping unit210stores the topological information and the metadata in the file datastore220. In some implementations, the file mapping unit210provides the file mapping information to each of the client devices105a-105d. The mapping information may also be generated for files and/or folders that have been stored by the file management service110. In implementations in which the file synchronization data is stored on the file services platform110and not provided to the client devices105a-105d, the client devices105a-105dcan access and browse this information via the web application provided by the file services platform110and/or the browser application255or web-enabled native application250on the client devices105a-105d.

The file transfer unit215is configured to facilitate the upload of files and/or folders from the client devices105a-105dand downloads of files and/or folders to the client devices105a-105d. The file transfer unit215communicates with a native application or service on the client devices105a-105dto facilitate the uploads from the client devices105a-105dand downloads to the client devices105a-105d. The file transfer unit215stores files and/or folders in the file datastore220uploaded from the client devices105a-105d. The file transfer unit215also facilitates the removal of files and/or folders from the client devices105a-105dand/or the file services platform110in response to a request to remove a copy of the files and/or folders from the client devices105a-105dand/or the file services platform110. Such a request to remove the files and/or folders may be used to ensure that a copy of file remains on at least one client device105of the user, which the user may specify. A technical benefit of this approach is that it provides the user with fine-grained control over where copies of the files and/or folders are maintained. The topological mapping generated by the file mapping unit210and the metadata associated with the files and/or folders is still available to the user via any of their authorized client devices105a-105dand/or via a user interface provided by the user interface unit230of the file services platform.

The user interface unit230provides a web application that can be accessed by a browser application or browser-enabled native application the client devices105a-105d. The web application provides a user interface for accessing the topological information and/or metadata collected by the file mapping unit210to permit a user to view which files are located on each client device105a-105dand/or the file services platform110. The user interface includes controls the enable the user to determine which files and/or folders are synchronized from each of the client devices105a-105d.FIGS.4A-4D, which are described in detail in the following examples, show examples of such a user interface. In some implementations, a native application250on the client device provides a user interface similar to that of the web application of the user interface unit230.

The file datastore220is a persistent datastore that is used by the file services platform110to store files and/or folders synchronized from the client devices105a-105d, topological data determined by the file mapping unit210, and metadata associated with the files and/or folders. The data associated with each user is segregated to prevent unauthorized users from obtaining access to the content of another user.

The authentication unit225provides functionality for verifying whether users are permitted to access the services provided by the file services platform110. In some implementations, the authentication unit225provides functionality for receiving authentication credentials for the users from their respective client device105and/or from the application service125. The authentication unit225may be configured to verify that the authentication credentials are valid and permit the users to access the services provided by the file services platform110responsive to the authentication credentials being valid.

The application service125may include an application services unit260and/or an authentication unit265. The application services unit260provides functionality for users to consume, create, share, collaborate on, and/or modify various types of electronic content. The application services unit260may utilize the file services platform110to store electronic content in files and/or to access existing electronic content stored in files on the file services platform110and/or the client devise105a-105d. The files may also be organized into folders, and a folder may also include a mix of files and other folders. In some implementations, the application services unit260provides a web-based interface to enable users to access at least a portion of the services provided by the application service125. In other implementations, users may access the services provided by the application service125via one or more native applications250. The application services unit260may in turn obtain the services provided by the file services platform110.

The authentication unit265provides functionality for verifying whether users are permitted to access the services and/or documents provided by the application service125and/or the file services platform110. In some implementations, the authentication unit265provides functionality for receiving authentication credentials for the users from their respective client device105. In such implementations, the authentication unit265verifies that the authentication credentials are valid and permit the users to access the services and/or documents provided by the application service125and/or the file services platform110responsive to the authentication credentials being valid.

The client device105may include one or more native applications250and/or a browser application255. In some implementations, the one or more native applications250includes a native application configured to communicate with the application service125to enable users to consume, create, share, collaborate on, and/or modify electronic content using the services provided by the application service125. In some implementations, the one or more native applications250includes a native application configured to communicate with the file services platform110. In such implementations, the native application provides an interface for users to upload files and/or folders to the file services platform110. The user interface also enables the user to view the topological information and/or metadata collected from the client devices105a-105dby the file mapping unit210. The user interface also enables the user to request the download of files and/or folders to one on or more of the client devices105a-105dand/or to remove copies of the files and/or folders from one or more of the client devices105a-105dand/or the file services platform110.

The browser application255is an application for accessing and viewing web-based content, which may be provided by the application service125and/or the file services platform110. The application services125may provide a web application290that enables users to consume, create, share, collaborate on, and/or modify content. A user of the client device105may access the web application290via the browser application255and the browser application renders a user interface for interacting with the application services125in the browser application255. In some implementations, the user interface unit230of the file services platform110provides a web application that enables the user to utilize the services of the file services platform110in a similar manner as the native application described above.

The application services125and/or the file services platform110may support both the one or more web-enabled native applications250and one or more web applications290, and the users may choose which approach best suits their needs. The file services platform110may also provide support for the one or more native applications250, the browser application255, or both to provide functionality for a user of the client device105to obtain the services provided by the file services platform110.

FIGS.3A-3Dshow examples of interactions between the client devices105and the file services platform110. In this example, the file services platform110obtains mapping information from the client devices105aand105b. As discussed in the preceding examples, the file mapping unit210of the file services platform110can obtain topological information and/or metadata from each of the client devices. In this example, the file mapping unit210sends a request for file mapping information302to the client device105aand a request for file mapping information306to the client device105b. The request for file mapping information302is received and processed by a native application or service on the client device105a, and the client device105aprovides the file mapping information304in response to the request. The file mapping information304includes topological information and metadata for the files and/or folders stored on the client device105a. Similarly, the request for file mapping information306is received and processed by a native application or service on the client device105b, and the client device105bprovides the file mapping information308in response to the request. The file mapping information308includes topological information and metadata for the files and/or folders stored on the client device105b. The process shown inFIG.3Amay be performed as client devices are added by the user. In some implementations, the user may initiate the mapping process from the respective client devices105aand105bby accessing the file services platform110from these devices and associating these devices with the user and providing authorization for the file services platform110to map the files and/or folders of these devices and/or to synchronize the files and/or folders of these devices with the file services platform110and/or with one or more of the other client devices105. In other implementations, the user may initiate the mapping process through a user interface provided by the file services platform110in which the user selects the client devices105to be associated with the user.

FIG.3Bis an example in which the user is currently using their laptop computer, which is the client device105a, but requires access to a copy of a file that is stored on their desktop computer, which is the client device105b. In this example implementation, the file that the user would like to access is not available on the file services platform110but is available on the desktop computer, the client device105b. The user indicated that this file should be stored on the client device105bbut not also synchronized with the file services platform110. The user may have elected to keep a copy of the file only on their desktop computer to ensure that copies of a sensitive document were not available on their laptop computer or other client devices105cor105d. However, the file services platform110has collected topological information and metadata from each of the client devices105a-105d. The user can review the topological information and metadata from the user interface of the native application290on the laptop computer or the user interface provided by the web application of the user interface unit230of the file services platform110. The user can select the file on the desktop computer that they would like to download to the laptop computer, and the file services platform110coordinates the upload of the file from the desktop computer and the download of the file to the laptop computer.

The client device105asends a request for file download310to the file services platform110. The file transfer unit215of the file services platform110determines that the file is not available in the file datastore220of the file services platform110because the file has not been synchronized with the file services platform110and requests the file from the client device105b. The file services platform110sends a request for file upload312to the client device105b. The native application or service associated with the file services platform110and running on the client device105breceives the request for file upload312. The native application or service returns a response message314and the requested file to the file services platform110. The file transfer unit215then sends a response316and the requested file to the client device105a. In some implementations, the client device105buploads the requested file to the file services platform110but does not include the response314, which may include status information, updated metadata, and/or other information associated with the requested file or with the request312. Similarly, in some implementations, the file services platform110may download the requested file to the client device105bwithout including the response316. The response316may include status information, updated metadata, and/or other information associated with the requested file or with the request310.

In some implementations, the client device105bmay be temporarily powered down or otherwise unavailable, in such instances, the file transfer unit215is configured to periodically resend a request for file download310to the file services platform110. In other implementations, the file services platform110may maintain a queue of requests and/or other notifications for client devices105that are powered down or otherwise unavailable, and the client devices105send a request to the file services platform110upon powering up, rebooting, or otherwise becoming available once again to check for requests and/or notifications from the file services platform110.

FIG.3Cis an example in which a user sends a request to migrate a file from one or more client devices105aand105bto the file services platform110and to remove the local copies of the files from the client devices105aand105b. In such an implementation, the user may wish to migrate local copies of a file from one or more client devices105aand105bto the file services platform105for storage. The user may wish to perform such an action where the client devices105aand105bto free up storage space on the client devices105aand105b. Furthermore, the client devices105aand105bmay be accessible to other users, and the user prefers to remove local copies of the file from these devices.

In the example shown inFIG.3C, a local copy of the file is found on both the client device105aand105b. The user selects the file to be migrated and initiates a command in the native application250or browser application255on the client device105a. The native application250or browser application255sends a request to migrate the file316and the file to the file services platform110. In this implementation, the file has not been synchronized with the file services platform110. However, if the file had already been synchronized with the file services platform110, the client device105awould not need to upload a copy of the file to the file services platform110with the request316. The file transfer unit215of the file services platform110stores a copy of the file in the file datastore220if the file had not already been stored therein. The file transfer unit215also determines that another local copy of the file is present on the client device105b(the user's desktop computer) based on the topological information and/or metadata collected by the file mapping unit210and stored in the file datastore220. The file transfer unit215sends a request318to remove the file from the client device105b. The native application or service associated with the file services platform110operating on the client device105breceives the request, deletes the local copy of the file, and provides a response320confirming that the local copy of the file has been removed. In some implementations, the client devices105bwas the only device having a local copy of the file, and the client device105bsend a copy of the file with the response320. In such implementations, the file services platform110sends an acknowledgement that the file has been received with the response320before the client device105bdeletes the local copy of the file from that device. In some implementations, the file services platform110may send a response322to the client device105aindicating that the request to migrate the file to the cloud-based storage of the file services platform110has been completed.

FIG.3Dis an example in which a user requests that a file be removed from the file services platform110and be stored locally on their desktop computer, the client device105b. The user in this instance prefers to store a single copy of the file on the desktop computer105band to remove the copy of the file synchronized and stored by the file services platform110. The user selects the file to be migrated to the client device105band initiates a command in the native application250or browser application255on the client device105a. The native application250or browser application255sends a request to migrate the file324off the file services platform110. The request indicates that the file should be removed from the file datastore220and a copy of the file migrated to the client device105b. The file transfer unit215of the file services platform110sends a request326to store the file on the client device105b. A copy of the file is provided with the request326instances where the file is not currently stored on the client device105b, or the latest version of the file had not yet been synchronized with the client device105b. The native application or service on the client device105bsends a response328to the file services platform110indicating that the file has been stored by the client device105b. The file services platform110may then remove any local copies of the file from the file datastore220. The file services platform110may also send a response330to the client device105aindicating that the request324has been completed.

FIGS.4A-4Dare diagrams of an example user interface405for managing the storage and download of files among the client devices105a-105dand the file services platform110.FIG.4Aprovides a view of the files and/or folders that are available on each of the client devices105a-105dand the file services platform110for a particular user. The view provided by the user interface405is based on the topological information and/or metadata collected from each of the client devices and/or the file services platform110by the file mapping unit210. Because this mapping information is synchronized with the file services platform110and/or the client devices105a-105das updates are made to files or folders stored therein, a first client device105may browse and interact with the topological information and/or metadata from each of the other client devices105, even if one of the other client devices105is temporarily unavailable. For example, the client device105a(the laptop computer) may temporarily lose network connectivity as the user packs the device up and takes it with them. Upon regaining network connectivity, the client device105acontacts the file services platform110to determine whether the file services platform110has any notifications pending in the notifications queue for the client device105aand performs any actions associated with those notifications. The actions may include updating mapping data, performing one or more actions related to one or more files or folders, including synchronizing of files and/or folders among the client devices105a-105dand the file services platform110. Consequently, the client devices105a-105dand the file services platform110can operate asynchronously for a period of time while a client device is unavailable.

The view shown by the user interface405includes icons that represent the various states of the content items. A folder icon indicates that a folder is backed up on a particular device or on the cloud storage provided by the file services platform110. In this example, the photos folders412,414, and416are synchronized with the mobile phone, cloud storage, ad the laptop computer, respectively. A folder icon with a cloud indicates that the folder is backed up only on the cloud storage. In this example, the presentation folder434is stored solely on the cloud storage and has not been synchronized with any of the client devices105a-105d. A file icon indicates that an instance of the file is synchronized to a particular device. In this example, the document A is synchronized on the desktop computer as document402and the cloud storage as document406, and the document D is synchronized on the mobile phone as document408and the cloud storage as document430. A cloud-icon indicates that a file is backed up solely on the cloud storage and has not been synchronized with any of the client device105a-105b. A file icon with a downward pointing arrow indicates an instance of a file that is available on a remote device but can be downloaded to the current device (the desktop computer in this example), to another client device and/or to upload to the cloud storage. In this example, the document B404stored on the laptop computer is the only instance of this file stored on the client devices105a-105dand the cloud storage provided by the file services platform110. Likewise, the document C418stored on the table is the only instance of this file stored on the client devices105a-105dand the cloud storage provided by the file services platform110. A cloud icon next to a document, such as the document E432, indicates that the document is stored only on the cloud storage and has not been synchronized with any of the client devices105a-105d.

The user may click on or otherwise interact with these icons to cause the cause the file services platform110to perform various actions on these files, such as but not limited to download an instance of the file to a current device, download move a file from one client device105to another client device105or the file services platform110. Other actions may include moving a file from file services platform110to one or more client devices105and removing the instance of the file from the file services platform110. Other such actions are also available in other implementations.

FIG.4Bis an example in which the user has clicked on or otherwise activated the icon associated with document B404stored on the laptop computer. In this example, the user is accessing the user interface405from the desktop computer which does not include a copy of the document B404. In response to the user activating the icon, the user is presented with the prompt490, which asks the user whether they would like to download a copy of the file to the desktop computer. The user may cancel the request or may confirm that they wish to proceed with the download.FIG.4Cshows an updated version of the user interface405in which an instance of the document B420has been downloaded to the desktop computer. Furthermore, the icon associated with the document B404has also been updated to a document icon, indicating that there are now multiple synchronized copies of the file available. In this example, the document B is synchronized to both the desktop computer and the laptop computer. Changes to the instance of document B420on the desktop computer will be synchronized with the instance of the document B404on the laptop computer, and vice versa.

FIG.4Dshows an example of a menu495that may be activated by right-clicking or otherwise interacting with an icon on the user interface405. The menu495includes options to trigger the download of a selected file or folder to the current device, to trigger the download of the file or folder to multiple devices, to migrate the file or folder to the cloud-based storage on the file services platform110only, or to migrate the file or folder to off of cloud-based storage on the file services platform110to on or more client devices. Downloading a file or folder to the current client device permits the user to temporarily or to permanently store a local copy of the file or folder on the client device105. The user may choose to later migrate the copy of the file or folder from the client device105to the cloud or another client device105. The option to migrate the file or folder to the cloud only causes the file services platform110to store a copy of the file in the file datastore220and to send requests to each of the client devices105a-105dthat have local copies of the file or folder to synchronize their copies with that of the file services platform110and to remove the local copies. The option to migrate the file or folder to device only storage permits the user to designate one or more of the client devices105a-105dto store an instance of the file or folder and to remove any instances of the file or folder stored on other client devise and/or the cloud-based storage provided by the file services platform110. In instances where multiple copies of the file are maintained on multiple client devices, the file services platform110may still facilitate synchronizing these files among the client devices on which the file is stored.

FIG.5is an example flow chart of an example process500for managing synchronization of file among a plurality of client devices and a file services platform. The process500may be implemented by the file services platform110described in the preceding examples.

The process500includes an operation510of obtaining, at a file services platform, first mapping information by mapping files, folders, or a combination thereof stored on each of a plurality of client devices associated with a first user, the file services platform being configured to selectively synchronize instances of the files, folders, or both among the plurality of client devices.

The process500includes an operation520of synchronizing the first mapping information with the plurality of client devices. As discussed in the preceding examples, the file services platform110provides the mapping information to each of the client devices105associated with the user that are authorized receive the mapping information.

The process500includes an operation530of receiving a first request for a first file from a first client device of the plurality of client devices, the first file stored locally on a second client device of the plurality of client devices. The user would like to access a file that is stored on a different client device. This file is stored local on this other client device and is not synchronized with the file services platform110. However, the techniques provided herein enable the user to browse what is stored on the other client device and/or the file services platform110by synchronizing the mapping information among the devices.

The process500includes an operation540of requesting that the second client device upload an instance of the first file to the file services platform and an operation550of receiving the instance of the first file from the second client device. The file services platform110facilitates obtain the instance of the first file from the second client device.

The process500includes an operation560of causing the first device to download the instance of the first file from the file services platform to the first client device. In some implementations, the file services platform110sends a notification to the first client device that the requested file is ready for download and the first client device initiates the download of the first file. In other implementations, the file services platform110pushes the instance of the first file to the first client device105in once the instance of the first file has been obtained from the second client device.

FIG.6is an example flow chart of an example process600for managing synchronization of file among a plurality of client devices and a file services platform. The process600may be implemented by a native application or service on the client device105.

The process600includes an operation610of obtaining first mapping information, at a first client device, from a file services platform for files, folders, or a combination thereof stored on a plurality of other client devices associated with a first user. As discussed in the preceding examples, the native application or service on the client devices105can obtain topological and metadata information from each of the client devices105associated with a user. The file services platform110facilitates synchronizing this information with each of the client devices105. A technical benefit of this approach is that the files and/or folders stored on the client devices do not need to be synchronized as well. Consequently, the amount of network, computing, and memory resources of the client devices105and the file services platform110are significantly reduces. Furthermore, the user can selectively determine which files and/or folders are synchronized with the file services platform110and each of the client devices105. This approach provides improved security for sensitive files by reducing the chances that a sensitive file could be access by an unauthorized user who obtains access to one of the user's client devices105.

The process600includes an operation610of presenting the first mapping information on a user interface for managing the storage and download of files among the client devices and the file services platform the first client device, including presenting information indicating on which device each file or folder is located and synchronization information indicating whether each file or folder has been synchronized with the first client device, the file services platform, and one or more of the other client devices. An example of this user interface is shown inFIGS.4A-4D.

The process600includes an operation610of receiving a signal from the user interface requesting a first file from the file services platform. The first file is not synchronized with the file services platform but is stored on a second client device of the plurality of client devices associated with the user. However, the user can browse the mapping information obtained from the plurality of client devices associated with the user using the interface405shown in the preceding examples. The user determines that an instance of the first file is stored on the second client device105and initiates a request to the file services platform110to obtain an instance of the file from the second client device105and to provide the instance of the file to the first client device.

The process600includes an operation610of receiving, from the file services platform, an instance of the first file obtained from the second client device. The client device105may store the instance of the first file in a memory of the first client device in a memory that is mapped and synchronized among the plurality of client devices105associated with the user and the file services platform110.

The detailed examples of systems, devices, and techniques described in connection withFIGS.1-6are presented herein for illustration of the disclosure and its benefits. Such examples of use should not be construed to be limitations on the logical process embodiments of the disclosure, nor should variations of user interface methods from those described herein be considered outside the scope of the present disclosure. It is understood that references to displaying or presenting an item (such as, but not limited to, presenting an image on a display device, presenting audio via one or more loudspeakers, and/or vibrating a device) include issuing instructions, commands, and/or signals causing, or reasonably expected to cause, a device or system to display or present the item. In some embodiments, various features described inFIGS.1-6are implemented in respective modules, which may also be referred to as, and/or include, logic, components, units, and/or mechanisms. Modules may constitute either software modules (for example, code embodied on a machine-readable medium) or hardware modules.

In some examples, a hardware module may be implemented mechanically, electronically, or with any suitable combination thereof. For example, a hardware module may include dedicated circuitry or logic that is configured to perform certain operations. For example, a hardware module may include a special-purpose processor, such as a field-programmable gate array (FPGA) or an Application Specific Integrated Circuit (ASIC). A hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations and may include a portion of machine-readable medium data and/or instructions for such configuration. For example, a hardware module may include software encompassed within a programmable processor configured to execute a set of software instructions. It will be appreciated that the decision to implement a hardware module mechanically, in dedicated and permanently configured circuitry, or in temporarily configured circuitry (for example, configured by software) may be driven by cost, time, support, and engineering considerations.

Accordingly, the phrase “hardware module” should be understood to encompass a tangible entity capable of performing certain operations and may be configured or arranged in a certain physical manner, be that an entity that is physically constructed, permanently configured (for example, hardwired), and/or temporarily configured (for example, programmed) to operate in a certain manner or to perform certain operations described herein. As used herein, “hardware-implemented module” refers to a hardware module. Considering examples in which hardware modules are temporarily configured (for example, programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where a hardware module includes a programmable processor configured by software to become a special-purpose processor, the programmable processor may be configured as respectively different special-purpose processors (for example, including different hardware modules) at different times. Software may accordingly configure a processor or processors, for example, to constitute a particular hardware module at one instance of time and to constitute a different hardware module at a different instance of time. A hardware module implemented using one or more processors may be referred to as being “processor implemented” or “computer implemented.”

Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules may be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications may be achieved through signal transmission (for example, over appropriate circuits and buses) between or among two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times, communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory devices to which the multiple hardware modules have access. For example, one hardware module may perform an operation and store the output in a memory device, and another hardware module may then access the memory device to retrieve and process the stored output.

In some examples, at least some of the operations of a method may be performed by one or more processors or processor-implemented modules. Moreover, the one or more processors may also operate to support performance of the relevant operations in a “cloud computing” environment or as a “software as a service” (SaaS). For example, at least some of the operations may be performed by, and/or among, multiple computers (as examples of machines including processors), with these operations being accessible via a network (for example, the Internet) and/or via one or more software interfaces (for example, an application program interface (API)). The performance of certain of the operations may be distributed among the processors, not only residing within a single machine, but deployed across several machines. Processors or processor-implemented modules may be in a single geographic location (for example, within a home or office environment, or a server farm), or may be distributed across multiple geographic locations.

FIG.7is a block diagram700illustrating an example software architecture702, various portions of which may be used in conjunction with various hardware architectures herein described, which may implement any of the above-described features.FIG.7is a non-limiting example of a software architecture, and it will be appreciated that many other architectures may be implemented to facilitate the functionality described herein. The software architecture702may execute on hardware such as a machine800ofFIG.8that includes, among other things, processors810, memory830, and input/output (I/O) components850. A representative hardware layer704is illustrated and can represent, for example, the machine800ofFIG.8. The representative hardware layer704includes a processing unit706and associated executable instructions708. The executable instructions708represent executable instructions of the software architecture702, including implementation of the methods, modules and so forth described herein. The hardware layer704also includes a memory/storage710, which also includes the executable instructions708and accompanying data. The hardware layer704may also include other hardware modules712. Instructions708held by processing unit706may be portions of instructions708held by the memory/storage710.

The example software architecture702may be conceptualized as layers, each providing various functionality. For example, the software architecture702may include layers and components such as an operating system (OS)714, libraries716, frameworks718, applications720, and a presentation layer744. Operationally, the applications720and/or other components within the layers may invoke API calls724to other layers and receive corresponding results726. The layers illustrated are representative in nature and other software architectures may include additional or different layers. For example, some mobile or special purpose operating systems may not provide the frameworks/middleware718.

The OS714may manage hardware resources and provide common services. The OS714may include, for example, a kernel728, services730, and drivers732. The kernel728may act as an abstraction layer between the hardware layer704and other software layers. For example, the kernel728may be responsible for memory management, processor management (for example, scheduling), component management, networking, security settings, and so on. The services730may provide other common services for the other software layers. The drivers732may be responsible for controlling or interfacing with the underlying hardware layer704. For instance, the drivers732may include display drivers, camera drivers, memory/storage drivers, peripheral device drivers (for example, via Universal Serial Bus (USB)), network and/or wireless communication drivers, audio drivers, and so forth depending on the hardware and/or software configuration.

The libraries716may provide a common infrastructure that may be used by the applications720and/or other components and/or layers. The libraries716typically provide functionality for use by other software modules to perform tasks, rather than rather than interacting directly with the OS714. The libraries716may include system libraries734(for example, C standard library) that may provide functions such as memory allocation, string manipulation, file operations. In addition, the libraries716may include API libraries736such as media libraries (for example, supporting presentation and manipulation of image, sound, and/or video data formats), graphics libraries (for example, an OpenGL library for rendering 2D and 3D graphics on a display), database libraries (for example, SQLite or other relational database functions), and web libraries (for example, WebKit that may provide web browsing functionality). The libraries716may also include a wide variety of other libraries738to provide many functions for applications720and other software modules.

The frameworks718(also sometimes referred to as middleware) provide a higher-level common infrastructure that may be used by the applications720and/or other software modules. For example, the frameworks718may provide various graphic user interface (GUI) functions, high-level resource management, or high-level location services. The frameworks718may provide a broad spectrum of other APIs for applications720and/or other software modules.

The applications720include built-in applications740and/or third-party applications742. Examples of built-in applications740may include, but are not limited to, a contacts application, a browser application, a location application, a media application, a messaging application, and/or a game application. Third-party applications742may include any applications developed by an entity other than the vendor of the particular platform. The applications720may use functions available via OS714, libraries716, frameworks718, and presentation layer744to create user interfaces to interact with users.

Some software architectures use virtual machines, as illustrated by a virtual machine748. The virtual machine748provides an execution environment where applications/modules can execute as if they were executing on a hardware machine (such as the machine800ofFIG.8, for example). The virtual machine748may be hosted by a host OS (for example, OS714) or hypervisor, and may have a virtual machine monitor746which manages operation of the virtual machine748and interoperation with the host operating system. A software architecture, which may be different from software architecture702outside of the virtual machine, executes within the virtual machine748such as an OS750, libraries752, frameworks754, applications756, and/or a presentation layer758.

FIG.8is a block diagram illustrating components of an example machine800configured to read instructions from a machine-readable medium (for example, a machine-readable storage medium) and perform any of the features described herein. The example machine800is in a form of a computer system, within which instructions816(for example, in the form of software components) for causing the machine800to perform any of the features described herein may be executed. As such, the instructions816may be used to implement modules or components described herein. The instructions816cause unprogrammed and/or unconfigured machine800to operate as a particular machine configured to carry out the described features. The machine800may be configured to operate as a standalone device or may be coupled (for example, networked) to other machines. In a networked deployment, the machine800may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a node in a peer-to-peer or distributed network environment. Machine800may be embodied as, for example, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a gaming and/or entertainment system, a smart phone, a mobile device, a wearable device (for example, a smart watch), and an Internet of Things (IoT) device. Further, although only a single machine800is illustrated, the term “machine” includes a collection of machines that individually or jointly execute the instructions816.

The machine800may include processors810, memory830, and I/O components850, which may be communicatively coupled via, for example, a bus802. The bus802may include multiple buses coupling various elements of machine800via various bus technologies and protocols. In an example, the processors810(including, for example, a central processing unit (CPU), a graphics processing unit (GPU), a digital signal processor (DSP), an ASIC, or a suitable combination thereof) may include one or more processors812ato812nthat may execute the instructions816and process data. In some examples, one or more processors810may execute instructions provided or identified by one or more other processors810. The term “processor” includes a multi-core processor including cores that may execute instructions contemporaneously. AlthoughFIG.8shows multiple processors, the machine800may include a single processor with a single core, a single processor with multiple cores (for example, a multi-core processor), multiple processors each with a single core, multiple processors each with multiple cores, or any combination thereof. In some examples, the machine800may include multiple processors distributed among multiple machines.

The memory/storage830may include a main memory832, a static memory834, or other memory, and a storage unit836, both accessible to the processors810such as via the bus802. The storage unit836and memory832,834store instructions816embodying any one or more of the functions described herein. The memory/storage830may also store temporary, intermediate, and/or long-term data for processors810. The instructions816may also reside, completely or partially, within the memory832,834, within the storage unit836, within at least one of the processors810(for example, within a command buffer or cache memory), within memory at least one of I/O components850, or any suitable combination thereof, during execution thereof. Accordingly, the memory832,834, the storage unit836, memory in processors810, and memory in I/O components850are examples of machine-readable media.

As used herein, “machine-readable medium” refers to a device able to temporarily or permanently store instructions and data that cause machine800to operate in a specific fashion, and may include, but is not limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical storage media, magnetic storage media and devices, cache memory, network-accessible or cloud storage, other types of storage and/or any suitable combination thereof. The term “machine-readable medium” applies to a single medium, or combination of multiple media, used to store instructions (for example, instructions816) for execution by a machine800such that the instructions, when executed by one or more processors810of the machine800, cause the machine800to perform and one or more of the features described herein. Accordingly, a “machine-readable medium” may refer to a single storage device, as well as “cloud-based” storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” excludes signals per se.

The I/O components850may include a wide variety of hardware components adapted to receive input, provide output, produce output, transmit information, exchange information, capture measurements, and so on. The specific I/O components850included in a particular machine will depend on the type and/or function of the machine. For example, mobile devices such as mobile phones may include a touch input device, whereas a headless server or IoT device may not include such a touch input device. The particular examples of I/O components illustrated inFIG.8are in no way limiting, and other types of components may be included in machine800. The grouping of I/O components850are merely for simplifying this discussion, and the grouping is in no way limiting. In various examples, the I/O components850may include user output components852and user input components854. User output components852may include, for example, display components for displaying information (for example, a liquid crystal display (LCD) or a projector), acoustic components (for example, speakers), haptic components (for example, a vibratory motor or force-feedback device), and/or other signal generators. User input components854may include, for example, alphanumeric input components (for example, a keyboard or a touch screen), pointing components (for example, a mouse device, a touchpad, or another pointing instrument), and/or tactile input components (for example, a physical button or a touch screen that provides location and/or force of touches or touch gestures) configured for receiving various user inputs, such as user commands and/or selections.

In some examples, the I/O components850may include biometric components856, motion components858, environmental components860, and/or position components862, among a wide array of other physical sensor components. The biometric components856may include, for example, components to detect body expressions (for example, facial expressions, vocal expressions, hand or body gestures, or eye tracking), measure biosignals (for example, heart rate or brain waves), and identify a person (for example, via voice-, retina-, fingerprint-, and/or facial-based identification). The motion components858may include, for example, acceleration sensors (for example, an accelerometer) and rotation sensors (for example, a gyroscope). The environmental components860may include, for example, illumination sensors, temperature sensors, humidity sensors, pressure sensors (for example, a barometer), acoustic sensors (for example, a microphone used to detect ambient noise), proximity sensors (for example, infrared sensing of nearby objects), and/or other components that may provide indications, measurements, or signals corresponding to a surrounding physical environment. The position components862may include, for example, location sensors (for example, a Global Position System (GPS) receiver), altitude sensors (for example, an air pressure sensor from which altitude may be derived), and/or orientation sensors (for example, magnetometers).

The I/O components850may include communication components864, implementing a wide variety of technologies operable to couple the machine800to network(s)870and/or device(s)880via respective communicative couplings872and882. The communication components864may include one or more network interface components or other suitable devices to interface with the network(s)870. The communication components864may include, for example, components adapted to provide wired communication, wireless communication, cellular communication, Near Field Communication (NFC), Bluetooth communication, Wi-Fi, and/or communication via other modalities. The device(s)880may include other machines or various peripheral devices (for example, coupled via USB).