Skip to content
No description, website, or topics provided.
C# Batchfile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
Nuget Added nuget configuration Nov 16, 2015
Source Merge branch 'master' of… Jan 29, 2016
.gitignore Added nuget configuration Nov 16, 2015
LICENSE Create LICENSE Nov 16, 2015
MediaFireLogo.png Added nuget configuration Nov 16, 2015 Update Jan 26, 2016

MediaFire SDK

A portable class library to integrate with the MediaFire API. Supported Platforms:

  • = .NET Framework 4.5

  • Windows 8
  • Windows Phone Silverlight 8 and 8.1
  • Windows Phone 8.1
  • Xamarin (Android, iOS and iOS Classic)
  • Universal Windows Platform


We recommend that you use nuget to get your hands on the library.

PM> Install-Package MediaFireSDK

Getting Started

Configuring the Agent

var config = new MediaFireApiConfiguration
                   appId: [Your_App_Id],
                   apiKey: [Your_App_Key],
                   apiVersion: "1.4", //desired api version
                   automaticallyRenewToken: true, // Lets the SDK automatically renew the session token.
                   chunkTransferBufferSize: 4096, // The buffer size to be used on Download and Upload operations.
                   useHttpV1:true //On some platforms, the client will throw the error "The server committed a protocol violation. Section=ResponseStatusLine". In that cases set this property to true. 
                   PeriodicallyRenewToken:true // The SDK will create a Task that will renew the token every **SessionRenewPeriod**.
	               SessionRenewPeriod = TimeSpan.FromMinutes(5)


const string Email = "";
const string Password = "";

var agent = new MediaFireAgent(config);

await agent.User.Authenticate(Email, Password);

Extending the SDK

Due to the constant API updates, the SDK does not implement every single method supported by the MediaFire API. To allow developers to use the SDK and still reach all available features, under the IMediaFireAgent class, there are three generic methods available:

Task<T> GetAsync<T>(string path, IDictionary<string, object> parameters = null, bool attachSessionToken = true) where T : MediaFireResponseBase;

Task<T> PostAsync<T>(string path, IDictionary<string, object> parameters = null, bool attachSessionToken = true) where T : MediaFireResponseBase;

Task<T> PostStreamAsync<T>(
            string path, 
            Stream content, 
            IDictionary<string, object> parameters, 
            IDictionary<string, string> headers, 
            bool attachSessionToken = true,
            CancellationToken? token = null,
            IProgress<MediaFireOperationProgress> progress = null 
            ) where T : MediaFireResponseBase;

These methods take advantage of the automatic session renew system and exception handling that the SDK offers. The PostStreamAsync should only be used by upload operations. As an example here is the implementation of the file/get_links method:

public async Task<MediaFireLinkCollection> GetLinks(string quickKey, MediaFireLinkType linkType = MediaFireLinkType.All)
	var res = await agent.GetAsync<MediaFireGetLinksResponse>(MediaFireApiFileMethods.GetLinks, new Dictionary<string, object>
		{MediaFireApiParameters.QuickKey, quickKey},
		{MediaFireApiParameters.LinkType, linkType.ToApiParameter()},

	var col = new MediaFireLinkCollection(res.Links)
		DirectDownloadFreeBandwidth = res.DirectDownloadFreeBandwidth,
		OneTimeDownloadRequestCount = res.OneTimeDownloadRequestCount,
		OneTimeKeyRequestCount = res.OneTimeKeyRequestCount,
		OneTimeKeyRequestMaxCount = res.OneTimeKeyRequestMaxCount

	return col;

The class MediaFireConstants contains most of the API parameters (MediaFireApiParameters class) and methods (MediaFireApiFileMethods.XXX, MediaFireApiFolderMethods.XXX, etc). Under MediaFireSDK.Model namespace there are some predefined responses of the API.


Stream fileStream = null; // The file stream to upload.
string fileName = "[Target_File_Name]";

var uploadDetails = await agent.Upload.Simple(
						  size: 0, // The SDK automatically gets the size of the fileStream 
						  folderKey: null,
						  progress: new Progress<MediaFireOperationProgress>(
							  (progress) =>
								  //Report Progress
						 actionOnDuplicate: MediaFireActionOnDuplicate.Replace);

  //  Wait until the upload is finalized in the Server.
	if (uploadDetails.IsComplete && uploadDetails.IsSuccess)
  await Task.Delay(1000);
	uploadDetails = await _agent.Upload.PollUpload(uploadDetails.Key);
} while (true);


//quickKey the file to download
//destination A writable stream

public async Task Download(string quickKey, Stream destination, CancellationToken token, IProgress<MediaFireOperationProgress> progress = null)
	var links = await GetLinks(quickKey, MediaFireLinkType.DirectDownload);
	if (links.Count != 0 && string.IsNullOrEmpty(links[0].DirectDownload))
		throw new MediaFireException(MediaFireErrorMessages.FileMustContainADirectLink);

	var fileLink = links[0].DirectDownload;

	if (progress == null)
		progress = new Progress<MediaFireOperationProgress>();

	var cli = new HttpClient();
	var resp = await cli.SendAsync(new HttpRequestMessage(HttpMethod.Get, fileLink), HttpCompletionOption.ResponseHeadersRead, token);


	var stream = await resp.Content.ReadAsStreamAsync();

	var progressData = new MediaFireOperationProgress
		TotalSize = resp.Content.Headers.ContentLength.Value

	using (destination)
			MediaFireHttpHelpers.CopyStreamWithProgress(stream, destination, progress, token, progressData,
You can’t perform that action at this time.