/// <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))); }