/// <summary>
/// Parses the specified data URL into an HttpPostedFileBase
/// </summary>
/// <param name="dataUri">The data URI.</param>
/// <returns>A parsed Data URI posted file.</returns>
public static DataUriPostedFile Parse(string dataUri)
{
if (!dataUri.StartsWith(DataUriPostedFile.Begin))
{
throw new ArgumentException(Properties.Strings.DataUriPostedFile_NotADataUri, "dataUri");
}
int indexOfDataSeparator = dataUri.IndexOf(DataUriPostedFile.DataSeparator, StringComparison.InvariantCultureIgnoreCase);
string metadata = dataUri.SubstringStartEnd(DataUriPostedFile.Begin.Length, indexOfDataSeparator - 1);
string data = dataUri.Substring(indexOfDataSeparator + 1);
bool base64 = metadata.Contains(DataUriPostedFile.Base64Marker);
metadata = metadata.Replace(DataUriPostedFile.Base64Marker, string.Empty);
var contentType = new ContentType(string.IsNullOrWhiteSpace(metadata) ? "text/plain" : metadata);
byte[] bytes = base64 ? Convert.FromBase64String(data) : HttpUtility.UrlDecodeToBytes(data);
return(new DataUriPostedFile(bytes.Length, "datauri" + FileExtensions.GetExtension(contentType.MediaType), contentType.MediaType, new MemoryStream(bytes)));
}