DropNet

A .NET client library for the Dropbox API.

Where to get it?

View source on Github

Whats supported?

  • .NET 3.5
  • Windows Phone 7.1 (Mango)

 

How do I use it?

The Client:

To use DropNet you need an instance of the DropNetClient class, this class does everything for DropNet. This class takes the API Key and API Secret (These must be obtained from Dropbox to access the API).

_client = new DropNetClient("API KEY", "API SECRET");

 

Login/Tokens:

Dropbox now requires a web authentication to get a usable token/secret, so this is a 3 step process.

1. Get Request Token – This step gets an oauth token from dropbox (NOTE: the token must pass the other steps before it can be used)

// Sync
_client.GetToken();

// Async
_client.GetTokenAsync((userLogin) =>
    {
        //Dont really need to do anything with userLogin, DropNet takes care of it for now
    },
    (error) =>
    {
        //Handle error
    });

2. Authorize App with Dropbox – This step involves sending the user to a login page on the dropbox site and having them authenticate there. The DropNet client has a function to return the url for you but the rest must be handled in app, this function also takes a callback url for redirecting the user to after they have logged in. (NOTE: The token still cant be used yet.)

var url = _client.BuildAuthorizeUrl();
//Use the url in a browser so the user can login

2.5 Open a browser with the url returned by BuildAuthorizeUrl – After we have the authorize url we need to direct the user there (use some sort of browser here depending on the platform) and navigate the user to the url. This will prompt them to login and authorize your app with the API.

3. Get an Access Token from the Request Token – This is the last stage of the process, converting the oauth request token into a usable dropbox API token. This function will use the clients stored Request Token but this can be overloaded if you need to specify a token to use.

// Sync 
var accessToken = _client.GetAccessToken(); //Store this token for "remember me" function

// Async
_client.GetAccessTokenAsync((accessToken) =>
    {
        //Store this token for "remember me" function
    },
    (error) =>
    {
        //Handle error
    });

 

Best Practices: Dropbox’s Developer page states several times in bold red font that applications should not store a users Dropbox password and to help enforce this DropNet allows you to manually set a users Token and Secret on the client.

_client = new DropNetClient("API KEY", "API SECRET", "USER TOKEN", "USER SECRET");
// OR
_client = new DropNetClient("API KEY", "API SECRET");
_client.UserLogin = new UserLogin { Token = "USER TOKEN", Secret = "USER SECRET" };

 

Create Account:

This function creates a new account on Dropbox with the default free account.

// Sync
_client.CreateAccount("test@example.com", "John", "Smith", "password");

// Async
_client.CreateAccountAsync("test@example.com", "John", "Smith", "password",
    (response) =>
    {
        //Do something on success
    },
    (error) =>
    {
        //Do something on error
    });

 

Get MetaData:

The Dropbox API uses Metadata to navigate through the its folder structure. Metadata gives us access to file and folder details (such as modified dates, file size, folder contents, etc.)

// Sync
var metaData = _client.GetMetaData("/Public"); //Folder

// Async
_client.GetMetaDataAsync("/Public",
    (metaData) =>
    {
        //Do something with MetaData
    },
    (error) =>
    {
        //Do something on error
    });

 

Get File:

The Get File is where files can be downloaded from Dropbox, just give DropNet a path and it will download your file.

// Sync
var fileBytes = _client.GetFile("/Getting Started.rtf");

// Async
_client.GetFileAsync("/Getting Started.rtf",
    (response) =>
    {
        //Do something with response
    },
    (error) =>
    {
        //Do something on error
    });

 

Upload File:

DropNet has a few variations of the Upload File function, some taking a FileInfo object, a file path or a raw byte array.

// Sync
var uploaded = _client.UploadFile("/", "test.txt", content); //FileInfo

// Async
_client.UploadFileAsync("/", "test.txt", content,
    (response) =>
    {
        //Do something with response
    },
    (error) =>
    {
        //Do something on error
    });

 

Copy/Move:

Copy and Move functions are simple, give DropNet a source path and a destination path and it will move the file or folder from the source path to the destination path.

// Sync
_client.Move("/Test.txt", "/Public/Test.txt");

// Async
_client.MoveAsync("/Test.txt", "/Public/Test.txt",
    (response) =>
    {
        //Do something
    },
    (error) =>
    {
        //Do something on error
    });

 

Delete:

Delete deletes a a specified file or folder from Dropbox. (Its OK, they have a backup…)

// Sync
_client.Delete("/Test.txt");

// Async
_client.DeleteAsync("/Test.txt",
    (response) =>
    {
        //Do something
    },
    (error) =>
    {
        //Do something on error
    });

 

Account Info:

Gets your account info from Dropbox (mainly used for Quota information)

// Sync
var accountInfo = _client.Account_Info();

// Async
_client.Account_InfoAsync((accountInfo) =>
    {
        //Do something with accountInfo
    },
    (error) =>
    {
        //Do something on error
    });

 

Create Folder:

This creates a new folder on Dropbox at the specified path

// Sync
var metaData = _client.CreateFolder("NewFolder1");

// Async
_client.CreateFolderAsync("NewFolder1",
    (metaData) =>
    {
        //Do something with metaData
    },
    (error) =>
    {
        //Do something on error
    });

Share:

This creates a temporary public link to a file.

// Sync
var shareResponse = _client.GetShare("/Getting Started.rtf");

// Async
_client.GetShareAsync("/Getting Started.rtf",
    (shareResponse) =>
    {
        //Do something with shareResponse
    },
    (error) =>
    {
        //Do something on error
    });

Thumbnails:

Gets an image thumbnail for a file in Dropbox. (Can set thumbnail size, defaults to small, 32px)

//Sync
var rawBytes = _client.GetThumbnail("/Temp/Test.png");

//Async
_client.GetThumbnailAsync("/Temp/Test.png",
    (rawBytes) =>
    {
        //Do something with rawBytes
    },
    (error) =>
    {
        //Do something on error
    });

Media:

Gets a media link for a media file in Dropbox. (used for streaming)

//Sync
var medialink = _client.GetMedia("/Temp/AwesomeVideo1.mp4");

//Async
_client.GetMediaAsync("/Temp/AwesomeVideo1.mp4",
    (medialink) =>
    {
        //Do something with medialink
    },
    (error) =>
    {
        //Do something on error
    });

Whats using it?

 

Made something with DropNet? Tell me about it and I’ll list it here. (@dkarzon)

If you have any questions about DropNet feel free to drop by the JabbR room - http://jabbr.net/#/rooms/DropNet


 

Change log

v1.9.3 (7 April 2012)

  • Updated RestSharp base (no longer requires Json.Net)
  • Removed Windows Phone 7.0 Project

v1.9.2 (22 March 2012)

  • Fixed a bug in PLAINTEXT authentication causing issues getting tokens

v1.9.1 (13 March 2012)

  • Updated authentication to use PLAINTEXT over HTTPS (slight performance increase)

v1.9 (6 March 2012)

  • Fixed Content Url issues
  • Updated internals to use 2 instances of the RestClient for the different base Urls.

v1.8.4 (20 February 2012)

  • Added Search function
  • Added BETA delta function (Dev Keys and app folder only)
  • Updated Json.Net reference to v4.0.8

v1.8.3 (21 January 2012)

  • Fixed the Newtonsoft.Json reference to force the specific version (Currently v4.0.5)
  • Added support for the media function (GetMedia and GetMedia Async)

v1.8.2 (21 December 2011)

  • Added GetThumbnail functions to get a thumbnail of an image
  • Added support for Sandbox mode

v1.8.1 (28 November 2011)

  • Took out the NuGet reference to RestSharp so I could include my own custom build of it (to fix file uploads)
  • Fixed bug: International characters (for real this time)
  • Fixed spelling of BuildAuthorizeUrl method
  • Added a WP7 Sample project (Current functionality is login and list root contents) [Github]
  • Updated Upload functions to return the new files MetaData (as given off by the API)

v1.8 (3 November 2011)

  • Updated to v1 of the Dropbox API (new authentication process)
  • Fixed bug: Foreign languages in file/folder names (actually this time)
  • Fixed NuGet package to get RestSharp v101.3 (until I fix the update)

v1.6 (25 August 2011)

  • Fixed bug: Foreign languages in file/folder names
  • Fixed bug: Async Create Account function failed

v1.5.6 (23 August 2011)

  • Added Thumbnail function to get an images thumbnail
  • Removed the “hardcoded” Restsharp and Json.NET references and included the NuGet versions of them

v1.5.5 (20 July 2011)

  • Added new Shares function to publicly share a file for a limited time (undocumented API method)
  • Changed the name of the Move/Copy Async methods to be more consistent with the rest of the naming (Move –> MoveAsync, Copy –> CopyAsync)