")
// // .Replace("", "
");
//}
private static readonly Dictionary MIMETypesDictionary = new Dictionary
{
{"ai", "application/postscript"},
{"aif", "audio/x-aiff"},
{"aifc", "audio/x-aiff"},
{"aiff", "audio/x-aiff"},
{"asc", "text/plain"},
{"atom", "application/atom+xml"},
{"au", "audio/basic"},
{"avi", "video/x-msvideo"},
{"bcpio", "application/x-bcpio"},
{"bin", "application/octet-stream"},
{"bmp", "image/bmp"},
{"cdf", "application/x-netcdf"},
{"cgm", "image/cgm"},
{"class", "application/octet-stream"},
{"cpio", "application/x-cpio"},
{"cpt", "application/mac-compactpro"},
{"csh", "application/x-csh"},
{"css", "text/css"},
{"dcr", "application/x-director"},
{"dif", "video/x-dv"},
{"dir", "application/x-director"},
{"djv", "image/vnd.djvu"},
{"djvu", "image/vnd.djvu"},
{"dll", "application/octet-stream"},
{"dmg", "application/octet-stream"},
{"dms", "application/octet-stream"},
{"doc", "application/msword"},
{"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
{"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
{"docm","application/vnd.ms-word.document.macroEnabled.12"},
{"dotm","application/vnd.ms-word.template.macroEnabled.12"},
{"dtd", "application/xml-dtd"},
{"dv", "video/x-dv"},
{"dvi", "application/x-dvi"},
{"dxr", "application/x-director"},
{"eps", "application/postscript"},
{"etx", "text/x-setext"},
{"exe", "application/octet-stream"},
{"ez", "application/andrew-inset"},
{"gif", "image/gif"},
{"gram", "application/srgs"},
{"grxml", "application/srgs+xml"},
{"gtar", "application/x-gtar"},
{"hdf", "application/x-hdf"},
{"hqx", "application/mac-binhex40"},
{"htm", "text/html"},
{"html", "text/html"},
{"ice", "x-conference/x-cooltalk"},
{"ico", "image/x-icon"},
{"ics", "text/calendar"},
{"ief", "image/ief"},
{"ifb", "text/calendar"},
{"iges", "model/iges"},
{"igs", "model/iges"},
{"jnlp", "application/x-java-jnlp-file"},
{"jp2", "image/jp2"},
{"jpe", "image/jpeg"},
{"jpeg", "image/jpeg"},
{"jpg", "image/jpeg"},
{"js", "application/x-javascript"},
{"kar", "audio/midi"},
{"latex", "application/x-latex"},
{"lha", "application/octet-stream"},
{"lzh", "application/octet-stream"},
{"m3u", "audio/x-mpegurl"},
{"m4a", "audio/mp4a-latm"},
{"m4b", "audio/mp4a-latm"},
{"m4p", "audio/mp4a-latm"},
{"m4u", "video/vnd.mpegurl"},
{"m4v", "video/x-m4v"},
{"mac", "image/x-macpaint"},
{"man", "application/x-troff-man"},
{"mathml", "application/mathml+xml"},
{"me", "application/x-troff-me"},
{"mesh", "model/mesh"},
{"mid", "audio/midi"},
{"midi", "audio/midi"},
{"mif", "application/vnd.mif"},
{"mov", "video/quicktime"},
{"movie", "video/x-sgi-movie"},
{"mp2", "audio/mpeg"},
{"mp3", "audio/mpeg"},
{"mp4", "video/mp4"},
{"mpe", "video/mpeg"},
{"mpeg", "video/mpeg"},
{"mpg", "video/mpeg"},
{"mpga", "audio/mpeg"},
{"ms", "application/x-troff-ms"},
{"msh", "model/mesh"},
{"mxu", "video/vnd.mpegurl"},
{"nc", "application/x-netcdf"},
{"oda", "application/oda"},
{"ogg", "application/ogg"},
{"pbm", "image/x-portable-bitmap"},
{"pct", "image/pict"},
{"pdb", "chemical/x-pdb"},
{"pdf", "application/pdf"},
{"pgm", "image/x-portable-graymap"},
{"pgn", "application/x-chess-pgn"},
{"pic", "image/pict"},
{"pict", "image/pict"},
{"png", "image/png"},
{"pnm", "image/x-portable-anymap"},
{"pnt", "image/x-macpaint"},
{"pntg", "image/x-macpaint"},
{"ppm", "image/x-portable-pixmap"},
{"ppt", "application/vnd.ms-powerpoint"},
{"pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"},
{"potx","application/vnd.openxmlformats-officedocument.presentationml.template"},
{"ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
{"ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"},
{"pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"},
{"potm","application/vnd.ms-powerpoint.template.macroEnabled.12"},
{"ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"},
{"ps", "application/postscript"},
{"qt", "video/quicktime"},
{"qti", "image/x-quicktime"},
{"qtif", "image/x-quicktime"},
{"ra", "audio/x-pn-realaudio"},
{"ram", "audio/x-pn-realaudio"},
{"ras", "image/x-cmu-raster"},
{"rdf", "application/rdf+xml"},
{"rgb", "image/x-rgb"},
{"rm", "application/vnd.rn-realmedia"},
{"roff", "application/x-troff"},
{"rtf", "text/rtf"},
{"rtx", "text/richtext"},
{"sgm", "text/sgml"},
{"sgml", "text/sgml"},
{"sh", "application/x-sh"},
{"shar", "application/x-shar"},
{"silo", "model/mesh"},
{"sit", "application/x-stuffit"},
{"skd", "application/x-koan"},
{"skm", "application/x-koan"},
{"skp", "application/x-koan"},
{"skt", "application/x-koan"},
{"smi", "application/smil"},
{"smil", "application/smil"},
{"snd", "audio/basic"},
{"so", "application/octet-stream"},
{"spl", "application/x-futuresplash"},
{"src", "application/x-wais-source"},
{"sv4cpio", "application/x-sv4cpio"},
{"sv4crc", "application/x-sv4crc"},
{"svg", "image/svg+xml"},
{"swf", "application/x-shockwave-flash"},
{"t", "application/x-troff"},
{"tar", "application/x-tar"},
{"tcl", "application/x-tcl"},
{"tex", "application/x-tex"},
{"texi", "application/x-texinfo"},
{"texinfo", "application/x-texinfo"},
{"tif", "image/tiff"},
{"tiff", "image/tiff"},
{"tr", "application/x-troff"},
{"tsv", "text/tab-separated-values"},
{"txt", "text/plain"},
{"ustar", "application/x-ustar"},
{"vcd", "application/x-cdlink"},
{"vrml", "model/vrml"},
{"vxml", "application/voicexml+xml"},
{"wav", "audio/x-wav"},
{"wbmp", "image/vnd.wap.wbmp"},
{"wbmxl", "application/vnd.wap.wbxml"},
{"wml", "text/vnd.wap.wml"},
{"wmlc", "application/vnd.wap.wmlc"},
{"wmls", "text/vnd.wap.wmlscript"},
{"wmlsc", "application/vnd.wap.wmlscriptc"},
{"wrl", "model/vrml"},
{"xbm", "image/x-xbitmap"},
{"xht", "application/xhtml+xml"},
{"xhtml", "application/xhtml+xml"},
{"xls", "application/vnd.ms-excel"},
{"xml", "application/xml"},
{"xpm", "image/x-xpixmap"},
{"xsl", "application/xml"},
{"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{"xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
{"xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"},
{"xltm","application/vnd.ms-excel.template.macroEnabled.12"},
{"xlam","application/vnd.ms-excel.addin.macroEnabled.12"},
{"xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
{"xslt", "application/xslt+xml"},
{"xul", "application/vnd.mozilla.xul+xml"},
{"xwd", "image/x-xwindowdump"},
{"xyz", "chemical/x-xyz"},
{"zip", "application/zip"}
};
public static string GetMimeType(this string fileName)
{
//get file extension
string extension = Path.GetExtension(fileName).ToLowerInvariant();
if (extension.Length > 0 &&
MIMETypesDictionary.ContainsKey(extension.Remove(0, 1)))
{
return MIMETypesDictionary[extension.Remove(0, 1)];
}
return "unknown/unknown";
}
public static string ExistsOrCreateDirectory(this string path, HttpContext httpContext)
{
if (path.StartsWith("~")) path = path.ServerMapPath(httpContext);
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
return path;
}
public static string AddPrifixIsNotEmpty(this string input, string prefix)
{
if (!input.IsNullOrEmpty()) return "{0}{1}".ApplyFormat(prefix, input);
return string.Empty;
}
public static string AddPrifixIsNotEmpty(this string input, string prefix, int count)
{
if (input.IsNullOrEmpty()) return string.Empty;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < count; i++) builder.Append(prefix);
return "{0}{1}".ApplyFormat(builder.ToString(), input);
}
public static string AddSufixIsNotEmpty(this string input, string sufix)
{
if (!input.IsNullOrEmpty()) return "{1}{0}".ApplyFormat(sufix, input);
return string.Empty;
}
public static byte TryParseToByte(this string input, byte defaultValue)
{
byte result;
if (byte.TryParse(input, out result)) return result;
return defaultValue;
}
public static Decimal? TryParseToDecimalNulable(this string input)
{
Decimal decimalValue = 0;
if (!Decimal.TryParse(input, out decimalValue)) return null;
return decimalValue;
}
public static Double? TryParseToDoubleNulable(this string input)
{
Double decimalValue = 0;
if (!Double.TryParse(input, out decimalValue)) return null;
return decimalValue;
}
public static decimal GetValueDecimal(this string input)
{
decimal value;
if (decimal.TryParse(input, NumberStyles.Any, ci.NumberFormat, out value))
return value;
return decimal.MinValue;
}
public static Guid TryParseToGuid(this string value, Guid defaultValue)
{
Guid td;
if (Guid.TryParse(value, out td)) return td;
return defaultValue;
}
public static Guid? TryParseToGuidNulable(this string value, Guid? defaultValue)
{
Guid td;
if (Guid.TryParse(value, out td)) return td;
return defaultValue;
}
public static DateTime TryParseToDateXMLNullable(this string value, DateTime defaultValue)
{
if (value.IsNullOrEmpty()) return defaultValue;
var collections = value.ParseToSplitCollection('T');
if (collections.Count() == 1)
{
collections = collections.AddToNewList("00:00:00");
}
var dtvalues = collections.FirstOrDefault().ParseToInt32Collection("-").ToArray();
var timevalues = collections.LastOrDefault().ParseToInt32Collection(":").ToArray();
DateTime dt = DateTime.MaxValue;
if (dtvalues.Count() == 3)
{
try
{
defaultValue = new DateTime(dtvalues[0], dtvalues[1], dtvalues[2], timevalues[0], timevalues[1], timevalues[2]);
}
catch (Exception) { }
}
return defaultValue;
}
public static DateTime? TryParseToDateXMLNullable(this string value)
{
var result = value.TryParseToDateXMLNullable(DateTime.MinValue);
if (result == DateTime.MinValue) return null;
return result;
}
public static string GetShortFIO(this string value)
{
string result = "";
if (value == null || value.Trim() == "")
return result;
string[] arrayString = value.Split(' ');
for (int i = 0; i < arrayString.Length; i++)
{
if (i == 0)
{
result = arrayString[i];
}
else
{
result += " " + arrayString[i].ToUpper().FirstOrDefault() + ".";
}
}
return result;
}
public static string GetDigit(this string value)
{
return string.Join("", value.Where(c => char.IsDigit(c))); ;
}
public static string GZipCompress(this string s, CompressionMode mode, Encoding encoding)
{
if (mode == CompressionMode.Compress)
{
using (var outputStream = new MemoryStream())
{
using (var compressionStream = new GZipStream(outputStream, CompressionMode.Compress))
using (var inputStream = new MemoryStream(encoding.GetBytes(s)))
inputStream.CopyTo(compressionStream);
return System.Convert.ToBase64String(outputStream.ToArray());
}
}
else
{
using (var outputStream = new MemoryStream())
{
using (var inputStream = new MemoryStream(System.Convert.FromBase64String(s)))
using (var compressionStream = new GZipStream(inputStream, mode))
compressionStream.CopyTo(outputStream);
return encoding.GetString(outputStream.ToArray());
}
}
}
public static string ReadFileTextToEnd(this string fileName)
{
var reader = new StreamReader(fileName);
return reader.ReadToEnd();
}
public static string GetMD5Hash(this string value)
{
if (string.IsNullOrWhiteSpace(value)) return string.Empty;
using (MD5 md5 = MD5.Create())
{
return md5.ComputeHash(Encoding.UTF8.GetBytes(value)).GetHashString();
}
}
public static string ToKeyHashMD5(this string value, int size = 256)
{
string hash = value.GetMD5Hash();
string trans = value.TranslitToEnglish();
string result = trans;
if (trans.Length > size)
{
result = trans.Substring(0, (size - hash.Length - 1)) + "_" + hash;
}
return result;
}
public static string ToKeyHash(this string value, int size = 256)
{
string hash = value.GetHashString();
string trans = value.TranslitToEnglish();
string result = trans;
if (trans.Length > size)
{
result = trans.Substring(0, (size - hash.Length - 1)) + "_" + hash;
}
return result;
}
public static byte[] GetHash(this string inputString)
{
using (HashAlgorithm algorithm = SHA256.Create())
return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
public static string GetHashString(this string inputString) => GetHash(inputString).GetHashString();
public static string GetHashString(this byte[] bytes)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bytes)
sb.Append(b.ToString("X2"));
return sb.ToString();
}
public static string RemoveFilenameForbidden(
this string inputString,
bool toLower = false,
bool deleteDoubleSpace = true,
bool deleteLastSpace = true)
{
#region Allowed chars
string allowedSymbols = string.Empty;
allowedSymbols += "abcdefghijklmnopqrstuvwxyz";
allowedSymbols += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
allowedSymbols += "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
allowedSymbols += "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
allowedSymbols += "0123456789";
allowedSymbols += "~.#№()-_ ";
#endregion
var result = new StringBuilder();
foreach (char c in inputString)
{
if (allowedSymbols.Contains(c))
result.Append(c);
else
result.Append(' ');
}
string resultKey = result.ToString();
if (toLower) resultKey = resultKey.ToLower();
if (deleteDoubleSpace)
{
while (resultKey.Contains(" ")) resultKey = resultKey.Replace(" ", " ");
}
if (deleteLastSpace)
{
while (resultKey.Last() == ' ') resultKey = resultKey.Substring(0, resultKey.Length - 1);
}
return resultKey;
}
public static string RemovePathForbidden(
this string inputString,
bool toLower = false,
bool deleteDoubleSpace = true,
bool deleteLastSpace = true)
{
#region Allowed chars
string allowedSymbols = string.Empty;
allowedSymbols += "abcdefghijklmnopqrstuvwxyz";
allowedSymbols += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
allowedSymbols += "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
allowedSymbols += "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
allowedSymbols += "0123456789";
allowedSymbols += "/~.#№()-_ ";
#endregion
var result = new StringBuilder();
foreach (char c in inputString)
{
if (allowedSymbols.Contains(c))
result.Append(c);
else
result.Append(' ');
}
string resultKey = result.ToString();
if (toLower) resultKey = resultKey.ToLower();
if (deleteDoubleSpace)
{
while (resultKey.Contains(" ")) resultKey = resultKey.Replace(" ", " ");
}
if (deleteLastSpace)
{
while (resultKey.Last() == ' ') resultKey = resultKey.Substring(0, resultKey.Length - 1);
}
return resultKey;
}
public static string CreateUserToken(this Guid guid)
{
return guid.ToString().Replace("-", string.Empty);
}
public static string AppendToken(this string str, int tokenLength = 16)
{
return str + str.GenerateToken(tokenLength);
}
private static readonly Random _random = new Random();
private const string _alphabetLower = "abcdefghijklmnopqrstuvwxyz";
private const string _alphabetUpper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private const string _digitDec = "0123456789";
private const string _digitHex = "abcdef";
public static string GenerateToken(this string str, int tokenLength, GenerateTokenAlphabetMode alphabetMode = GenerateTokenAlphabetMode.AnyCase, GenerateTokenDigitMode digitMode = GenerateTokenDigitMode.Dec)
{
string allowedChars = string.Empty;
switch (alphabetMode)
{
case GenerateTokenAlphabetMode.None:
break;
case GenerateTokenAlphabetMode.AnyCase:
allowedChars += _alphabetLower + _alphabetUpper;
break;
case GenerateTokenAlphabetMode.LowerCase:
allowedChars += _alphabetLower;
break;
case GenerateTokenAlphabetMode.UpperCase:
allowedChars += _alphabetUpper;
break;
}
switch (digitMode)
{
case GenerateTokenDigitMode.None:
break;
case GenerateTokenDigitMode.Hex:
allowedChars += _digitDec + _digitHex;
break;
case GenerateTokenDigitMode.Dec:
allowedChars += _digitDec;
break;
}
if (allowedChars.Length < 1) return string.Empty;
StringBuilder sb = new StringBuilder(tokenLength);
for (int i = 0; i < tokenLength; i++)
{
int charIndex = _random.Next() % allowedChars.Length;
sb.Append(allowedChars[charIndex]);
}
return sb.ToString();
}
public static string ToLinuxPath(this string path)
{
return path.Replace("\\", "/");
}
public static string TrimPath(this string path)
{
return path.TrimStart('/', '\\');
}
public static string ReadEmbeddedResource(this string resourceName)
{
// Получаем путь к сборке
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
// Читаем ресурс
using (Stream? stream = assembly.GetManifestResourceStream(resourceName))
{
if (stream == null) throw new FileNotFoundException($"Resource '{resourceName}' not found");
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
public static string CreateSQLiteConnectionString(this string filePath, string mode = "ReadWrite")
{
return $"Data Source={filePath};Mode={mode};";
}
}
}