CloudGamingAdmin/admin-server/CloudGaming.Core/Tools.cs
2024-11-15 02:58:48 +08:00

1044 lines
41 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace CloudGaming.Core;
/// <summary>
/// Tools
/// </summary>
public static class Tools
{
#region
/// <summary>
/// MD5加密
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns></returns>
public static string Md5Encrypt(string str)
{
using var md5 = MD5.Create();
var data = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
var builder = new StringBuilder();
// 循环遍历哈希数据的每一个字节并格式化为十六进制字符串
for (int i = 0; i < data.Length; i++)
{
builder.Append(data[i].ToString("X2"));
}
return builder.ToString();
}
//默认密钥向量
private static readonly byte[] Keys =
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为16位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string DESEncrypt(string encryptString, string encryptKey = "Key123Ace#321Key")
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 16));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
var DCSP = Aes.Create();
var mStream = new MemoryStream();
var cStream = new CryptoStream(mStream, DCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为16位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DESDecrypt(string decryptString, string decryptKey = "Key123Ace#321Key")
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 16));
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
var DCSP = Aes.Create();
var mStream = new MemoryStream();
var cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
//Byte[] inputByteArrays = new byte[inputByteArray.Length];
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
#endregion
/// <summary>
/// 随机数
/// </summary>
/// <param name="length">随机数长度</param>
/// <returns></returns>
public static string GetSjs(int length)
{
var stringBuilder = new StringBuilder();
for (int i = 0; i < 10; i++)
{
var ran = new Random();
stringBuilder.Append(ran.Next(10));
}
return stringBuilder.ToString();
}
/// <summary>
/// 根据日期获取星期几
/// </summary>
public static string GetWeekByDate(DateTime dt)
{
var day = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
return day[Convert.ToInt32(dt.DayOfWeek.ToString("d"))];
}
/// <summary>
/// 得到这个月的第几周
/// </summary>
/// <param name="daytime">年月日</param>
/// <returns>传递过来的时间是第几周</returns>
public static int GetWeekNumInMonth(DateTime daytime)
{
int dayInMonth = daytime.Day;
//本月第一天
DateTime firstDay = daytime.AddDays(1 - daytime.Day);
//本月第一天是周几
int weekday = firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek;
//本月第一周有几天
int firstWeekEndDay = 7 - (weekday - 1);
//当前日期和第一周之差
int diffday = dayInMonth - firstWeekEndDay;
diffday = diffday > 0 ? diffday : 1;
//当前是第几周,如果整除7就减一天
int weekNumInMonth = (diffday % 7 == 0
? diffday / 7 - 1
: diffday / 7) + 1 + (dayInMonth > firstWeekEndDay ? 1 : 0);
return weekNumInMonth;
}
/// <summary>
/// 获取文件Content-Type
/// </summary>
public static IDictionary<string, string> GetFileContentType =
new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
{
#region Big freaking list of mime types
// combination of values from Windows 7 Registry and
// from C:\Windows\System32\inetsrv\config\applicationHost.config
// some added, including .7z and .dat
{ ".323", "text/h323" },
{ ".3g2", "video/3gpp2" },
{ ".3gp", "video/3gpp" },
{ ".3gp2", "video/3gpp2" },
{ ".3gpp", "video/3gpp" },
{ ".7z", "application/x-7z-compressed" },
{ ".aa", "audio/audible" },
{ ".AAC", "audio/aac" },
{ ".aaf", "application/octet-stream" },
{ ".aax", "audio/vnd.audible.aax" },
{ ".ac3", "audio/ac3" },
{ ".aca", "application/octet-stream" },
{ ".accda", "application/msaccess.addin" },
{ ".accdb", "application/msaccess" },
{ ".accdc", "application/msaccess.cab" },
{ ".accde", "application/msaccess" },
{ ".accdr", "application/msaccess.runtime" },
{ ".accdt", "application/msaccess" },
{ ".accdw", "application/msaccess.webapplication" },
{ ".accft", "application/msaccess.ftemplate" },
{ ".acx", "application/internet-property-stream" },
{ ".AddIn", "text/xml" },
{ ".ade", "application/msaccess" },
{ ".adobebridge", "application/x-bridge-url" },
{ ".adp", "application/msaccess" },
{ ".ADT", "audio/vnd.dlna.adts" },
{ ".ADTS", "audio/aac" },
{ ".afm", "application/octet-stream" },
{ ".ai", "application/postscript" },
{ ".aif", "audio/x-aiff" },
{ ".aifc", "audio/aiff" },
{ ".aiff", "audio/aiff" },
{ ".air", "application/vnd.adobe.air-application-installer-package+zip" },
{ ".amc", "application/x-mpeg" },
{ ".application", "application/x-ms-application" },
{ ".art", "image/x-jg" },
{ ".asa", "application/xml" },
{ ".asax", "application/xml" },
{ ".ascx", "application/xml" },
{ ".asd", "application/octet-stream" },
{ ".asf", "video/x-ms-asf" },
{ ".ashx", "application/xml" },
{ ".asi", "application/octet-stream" },
{ ".asm", "text/plain" },
{ ".asmx", "application/xml" },
{ ".aspx", "application/xml" },
{ ".asr", "video/x-ms-asf" },
{ ".asx", "video/x-ms-asf" },
{ ".atom", "application/atom+xml" },
{ ".au", "audio/basic" },
{ ".avi", "video/x-msvideo" },
{ ".axs", "application/olescript" },
{ ".bas", "text/plain" },
{ ".bcpio", "application/x-bcpio" },
{ ".bin", "application/octet-stream" },
{ ".bmp", "image/bmp" },
{ ".c", "text/plain" },
{ ".cab", "application/octet-stream" },
{ ".caf", "audio/x-caf" },
{ ".calx", "application/vnd.ms-office.calx" },
{ ".cat", "application/vnd.ms-pki.seccat" },
{ ".cc", "text/plain" },
{ ".cd", "text/plain" },
{ ".cdda", "audio/aiff" },
{ ".cdf", "application/x-cdf" },
{ ".cer", "application/x-x509-ca-cert" },
{ ".chm", "application/octet-stream" },
{ ".class", "application/x-java-applet" },
{ ".clp", "application/x-msclip" },
{ ".cmx", "image/x-cmx" },
{ ".cnf", "text/plain" },
{ ".cod", "image/cis-cod" },
{ ".config", "application/xml" },
{ ".contact", "text/x-ms-contact" },
{ ".coverage", "application/xml" },
{ ".cpio", "application/x-cpio" },
{ ".cpp", "text/plain" },
{ ".crd", "application/x-mscardfile" },
{ ".crl", "application/pkix-crl" },
{ ".crt", "application/x-x509-ca-cert" },
{ ".cs", "text/plain" },
{ ".csdproj", "text/plain" },
{ ".csh", "application/x-csh" },
{ ".csproj", "text/plain" },
{ ".css", "text/css" },
{ ".csv", "text/csv" },
{ ".cur", "application/octet-stream" },
{ ".cxx", "text/plain" },
{ ".dat", "application/octet-stream" },
{ ".datasource", "application/xml" },
{ ".dbproj", "text/plain" },
{ ".dcr", "application/x-director" },
{ ".def", "text/plain" },
{ ".deploy", "application/octet-stream" },
{ ".der", "application/x-x509-ca-cert" },
{ ".dgml", "application/xml" },
{ ".dib", "image/bmp" },
{ ".dif", "video/x-dv" },
{ ".dir", "application/x-director" },
{ ".disco", "text/xml" },
{ ".dll", "application/x-msdownload" },
{ ".dll.config", "text/xml" },
{ ".dlm", "text/dlm" },
{ ".doc", "application/msword" },
{ ".docm", "application/vnd.ms-word.document.macroEnabled.12" },
{ ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" },
{ ".dot", "application/msword" },
{ ".dotm", "application/vnd.ms-word.template.macroEnabled.12" },
{ ".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template" },
{ ".dsp", "application/octet-stream" },
{ ".dsw", "text/plain" },
{ ".dtd", "text/xml" },
{ ".dtsConfig", "text/xml" },
{ ".dv", "video/x-dv" },
{ ".dvi", "application/x-dvi" },
{ ".dwf", "drawing/x-dwf" },
{ ".dwp", "application/octet-stream" },
{ ".dxr", "application/x-director" },
{ ".eml", "message/rfc822" },
{ ".emz", "application/octet-stream" },
{ ".eot", "application/octet-stream" },
{ ".eps", "application/postscript" },
{ ".etl", "application/etl" },
{ ".etx", "text/x-setext" },
{ ".evy", "application/envoy" },
{ ".exe", "application/octet-stream" },
{ ".exe.config", "text/xml" },
{ ".fdf", "application/vnd.fdf" },
{ ".fif", "application/fractals" },
{ ".filters", "Application/xml" },
{ ".fla", "application/octet-stream" },
{ ".flr", "x-world/x-vrml" },
{ ".flv", "video/x-flv" },
{ ".fsscript", "application/fsharp-script" },
{ ".fsx", "application/fsharp-script" },
{ ".generictest", "application/xml" },
{ ".gif", "image/gif" },
{ ".group", "text/x-ms-group" },
{ ".gsm", "audio/x-gsm" },
{ ".gtar", "application/x-gtar" },
{ ".gz", "application/x-gzip" },
{ ".h", "text/plain" },
{ ".hdf", "application/x-hdf" },
{ ".hdml", "text/x-hdml" },
{ ".hhc", "application/x-oleobject" },
{ ".hhk", "application/octet-stream" },
{ ".hhp", "application/octet-stream" },
{ ".hlp", "application/winhlp" },
{ ".hpp", "text/plain" },
{ ".hqx", "application/mac-binhex40" },
{ ".hta", "application/hta" },
{ ".htc", "text/x-component" },
{ ".htm", "text/html" },
{ ".html", "text/html" },
{ ".htt", "text/webviewhtml" },
{ ".hxa", "application/xml" },
{ ".hxc", "application/xml" },
{ ".hxd", "application/octet-stream" },
{ ".hxe", "application/xml" },
{ ".hxf", "application/xml" },
{ ".hxh", "application/octet-stream" },
{ ".hxi", "application/octet-stream" },
{ ".hxk", "application/xml" },
{ ".hxq", "application/octet-stream" },
{ ".hxr", "application/octet-stream" },
{ ".hxs", "application/octet-stream" },
{ ".hxt", "text/html" },
{ ".hxv", "application/xml" },
{ ".hxw", "application/octet-stream" },
{ ".hxx", "text/plain" },
{ ".i", "text/plain" },
{ ".ico", "image/x-icon" },
{ ".ics", "application/octet-stream" },
{ ".idl", "text/plain" },
{ ".ief", "image/ief" },
{ ".iii", "application/x-iphone" },
{ ".inc", "text/plain" },
{ ".inf", "application/octet-stream" },
{ ".inl", "text/plain" },
{ ".ins", "application/x-internet-signup" },
{ ".ipa", "application/x-itunes-ipa" },
{ ".ipg", "application/x-itunes-ipg" },
{ ".ipproj", "text/plain" },
{ ".ipsw", "application/x-itunes-ipsw" },
{ ".iqy", "text/x-ms-iqy" },
{ ".isp", "application/x-internet-signup" },
{ ".ite", "application/x-itunes-ite" },
{ ".itlp", "application/x-itunes-itlp" },
{ ".itms", "application/x-itunes-itms" },
{ ".itpc", "application/x-itunes-itpc" },
{ ".IVF", "video/x-ivf" },
{ ".jar", "application/java-archive" },
{ ".java", "application/octet-stream" },
{ ".jck", "application/liquidmotion" },
{ ".jcz", "application/liquidmotion" },
{ ".jfif", "image/pjpeg" },
{ ".jnlp", "application/x-java-jnlp-file" },
{ ".jpb", "application/octet-stream" },
{ ".jpe", "image/jpeg" },
{ ".jpeg", "image/jpeg" },
{ ".jpg", "image/jpeg" },
{ ".js", "application/x-javascript" },
{ ".jsx", "text/jscript" },
{ ".jsxbin", "text/plain" },
{ ".latex", "application/x-latex" },
{ ".library-ms", "application/windows-library+xml" },
{ ".lit", "application/x-ms-reader" },
{ ".loadtest", "application/xml" },
{ ".lpk", "application/octet-stream" },
{ ".lsf", "video/x-la-asf" },
{ ".lst", "text/plain" },
{ ".lsx", "video/x-la-asf" },
{ ".lzh", "application/octet-stream" },
{ ".m13", "application/x-msmediaview" },
{ ".m14", "application/x-msmediaview" },
{ ".m1v", "video/mpeg" },
{ ".m2t", "video/vnd.dlna.mpeg-tts" },
{ ".m2ts", "video/vnd.dlna.mpeg-tts" },
{ ".m2v", "video/mpeg" },
{ ".m3u", "audio/x-mpegurl" },
{ ".m3u8", "audio/x-mpegurl" },
{ ".m4a", "audio/m4a" },
{ ".m4b", "audio/m4b" },
{ ".m4p", "audio/m4p" },
{ ".m4r", "audio/x-m4r" },
{ ".m4v", "video/x-m4v" },
{ ".mac", "image/x-macpaint" },
{ ".mak", "text/plain" },
{ ".man", "application/x-troff-man" },
{ ".manifest", "application/x-ms-manifest" },
{ ".map", "text/plain" },
{ ".master", "application/xml" },
{ ".mda", "application/msaccess" },
{ ".mdb", "application/x-msaccess" },
{ ".mde", "application/msaccess" },
{ ".mdp", "application/octet-stream" },
{ ".me", "application/x-troff-me" },
{ ".mfp", "application/x-shockwave-flash" },
{ ".mht", "message/rfc822" },
{ ".mhtml", "message/rfc822" },
{ ".mid", "audio/mid" },
{ ".midi", "audio/mid" },
{ ".mix", "application/octet-stream" },
{ ".mk", "text/plain" },
{ ".mmf", "application/x-smaf" },
{ ".mno", "text/xml" },
{ ".mny", "application/x-msmoney" },
{ ".mod", "video/mpeg" },
{ ".mov", "video/quicktime" },
{ ".movie", "video/x-sgi-movie" },
{ ".mp2", "video/mpeg" },
{ ".mp2v", "video/mpeg" },
{ ".mp3", "audio/mpeg" },
{ ".mp4", "video/mp4" },
{ ".mp4v", "video/mp4" },
{ ".mpa", "video/mpeg" },
{ ".mpe", "video/mpeg" },
{ ".mpeg", "video/mpeg" },
{ ".mpf", "application/vnd.ms-mediapackage" },
{ ".mpg", "video/mpeg" },
{ ".mpp", "application/vnd.ms-project" },
{ ".mpv2", "video/mpeg" },
{ ".mqv", "video/quicktime" },
{ ".ms", "application/x-troff-ms" },
{ ".msi", "application/octet-stream" },
{ ".mso", "application/octet-stream" },
{ ".mts", "video/vnd.dlna.mpeg-tts" },
{ ".mtx", "application/xml" },
{ ".mvb", "application/x-msmediaview" },
{ ".mvc", "application/x-miva-compiled" },
{ ".mxp", "application/x-mmxp" },
{ ".nc", "application/x-netcdf" },
{ ".nsc", "video/x-ms-asf" },
{ ".nws", "message/rfc822" },
{ ".ocx", "application/octet-stream" },
{ ".oda", "application/oda" },
{ ".odc", "text/x-ms-odc" },
{ ".odh", "text/plain" },
{ ".odl", "text/plain" },
{ ".odp", "application/vnd.oasis.opendocument.presentation" },
{ ".ods", "application/oleobject" },
{ ".odt", "application/vnd.oasis.opendocument.text" },
{ ".one", "application/onenote" },
{ ".onea", "application/onenote" },
{ ".onepkg", "application/onenote" },
{ ".onetmp", "application/onenote" },
{ ".onetoc", "application/onenote" },
{ ".onetoc2", "application/onenote" },
{ ".orderedtest", "application/xml" },
{ ".osdx", "application/opensearchdescription+xml" },
{ ".p10", "application/pkcs10" },
{ ".p12", "application/x-pkcs12" },
{ ".p7b", "application/x-pkcs7-certificates" },
{ ".p7c", "application/pkcs7-mime" },
{ ".p7m", "application/pkcs7-mime" },
{ ".p7r", "application/x-pkcs7-certreqresp" },
{ ".p7s", "application/pkcs7-signature" },
{ ".pbm", "image/x-portable-bitmap" },
{ ".pcast", "application/x-podcast" },
{ ".pct", "image/pict" },
{ ".pcx", "application/octet-stream" },
{ ".pcz", "application/octet-stream" },
{ ".pdf", "application/pdf" },
{ ".pfb", "application/octet-stream" },
{ ".pfm", "application/octet-stream" },
{ ".pfx", "application/x-pkcs12" },
{ ".pgm", "image/x-portable-graymap" },
{ ".pic", "image/pict" },
{ ".pict", "image/pict" },
{ ".pkgdef", "text/plain" },
{ ".pkgundef", "text/plain" },
{ ".pko", "application/vnd.ms-pki.pko" },
{ ".pls", "audio/scpls" },
{ ".pma", "application/x-perfmon" },
{ ".pmc", "application/x-perfmon" },
{ ".pml", "application/x-perfmon" },
{ ".pmr", "application/x-perfmon" },
{ ".pmw", "application/x-perfmon" },
{ ".png", "image/png" },
{ ".pnm", "image/x-portable-anymap" },
{ ".pnt", "image/x-macpaint" },
{ ".pntg", "image/x-macpaint" },
{ ".pnz", "image/png" },
{ ".pot", "application/vnd.ms-powerpoint" },
{ ".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12" },
{ ".potx", "application/vnd.openxmlformats-officedocument.presentationml.template" },
{ ".ppa", "application/vnd.ms-powerpoint" },
{ ".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12" },
{ ".ppm", "image/x-portable-pixmap" },
{ ".pps", "application/vnd.ms-powerpoint" },
{ ".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12" },
{ ".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow" },
{ ".ppt", "application/vnd.ms-powerpoint" },
{ ".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12" },
{ ".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation" },
{ ".prf", "application/pics-rules" },
{ ".prm", "application/octet-stream" },
{ ".prx", "application/octet-stream" },
{ ".ps", "application/postscript" },
{ ".psc1", "application/PowerShell" },
{ ".psd", "application/octet-stream" },
{ ".psess", "application/xml" },
{ ".psm", "application/octet-stream" },
{ ".psp", "application/octet-stream" },
{ ".pub", "application/x-mspublisher" },
{ ".pwz", "application/vnd.ms-powerpoint" },
{ ".qht", "text/x-html-insertion" },
{ ".qhtm", "text/x-html-insertion" },
{ ".qt", "video/quicktime" },
{ ".qti", "image/x-quicktime" },
{ ".qtif", "image/x-quicktime" },
{ ".qtl", "application/x-quicktimeplayer" },
{ ".qxd", "application/octet-stream" },
{ ".ra", "audio/x-pn-realaudio" },
{ ".ram", "audio/x-pn-realaudio" },
{ ".rar", "application/octet-stream" },
{ ".ras", "image/x-cmu-raster" },
{ ".rat", "application/rat-file" },
{ ".rc", "text/plain" },
{ ".rc2", "text/plain" },
{ ".rct", "text/plain" },
{ ".rdlc", "application/xml" },
{ ".resx", "application/xml" },
{ ".rf", "image/vnd.rn-realflash" },
{ ".rgb", "image/x-rgb" },
{ ".rgs", "text/plain" },
{ ".rm", "application/vnd.rn-realmedia" },
{ ".rmi", "audio/mid" },
{ ".rmp", "application/vnd.rn-rn_music_package" },
{ ".roff", "application/x-troff" },
{ ".rpm", "audio/x-pn-realaudio-plugin" },
{ ".rqy", "text/x-ms-rqy" },
{ ".rtf", "application/rtf" },
{ ".rtx", "text/richtext" },
{ ".ruleset", "application/xml" },
{ ".s", "text/plain" },
{ ".safariextz", "application/x-safari-safariextz" },
{ ".scd", "application/x-msschedule" },
{ ".sct", "text/scriptlet" },
{ ".sd2", "audio/x-sd2" },
{ ".sdp", "application/sdp" },
{ ".sea", "application/octet-stream" },
{ ".searchConnector-ms", "application/windows-search-connector+xml" },
{ ".setpay", "application/set-payment-initiation" },
{ ".setreg", "application/set-registration-initiation" },
{ ".settings", "application/xml" },
{ ".sgimb", "application/x-sgimb" },
{ ".sgml", "text/sgml" },
{ ".sh", "application/x-sh" },
{ ".shar", "application/x-shar" },
{ ".shtml", "text/html" },
{ ".sit", "application/x-stuffit" },
{ ".sitemap", "application/xml" },
{ ".skin", "application/xml" },
{ ".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12" },
{ ".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide" },
{ ".slk", "application/vnd.ms-excel" },
{ ".sln", "text/plain" },
{ ".slupkg-ms", "application/x-ms-license" },
{ ".smd", "audio/x-smd" },
{ ".smi", "application/octet-stream" },
{ ".smx", "audio/x-smd" },
{ ".smz", "audio/x-smd" },
{ ".snd", "audio/basic" },
{ ".snippet", "application/xml" },
{ ".snp", "application/octet-stream" },
{ ".sol", "text/plain" },
{ ".sor", "text/plain" },
{ ".spc", "application/x-pkcs7-certificates" },
{ ".spl", "application/futuresplash" },
{ ".src", "application/x-wais-source" },
{ ".srf", "text/plain" },
{ ".SSISDeploymentManifest", "text/xml" },
{ ".ssm", "application/streamingmedia" },
{ ".sst", "application/vnd.ms-pki.certstore" },
{ ".stl", "application/vnd.ms-pki.stl" },
{ ".sv4cpio", "application/x-sv4cpio" },
{ ".sv4crc", "application/x-sv4crc" },
{ ".svc", "application/xml" },
{ ".swf", "application/x-shockwave-flash" },
{ ".t", "application/x-troff" },
{ ".tar", "application/x-tar" },
{ ".tcl", "application/x-tcl" },
{ ".testrunconfig", "application/xml" },
{ ".testsettings", "application/xml" },
{ ".tex", "application/x-tex" },
{ ".texi", "application/x-texinfo" },
{ ".texinfo", "application/x-texinfo" },
{ ".tgz", "application/x-compressed" },
{ ".thmx", "application/vnd.ms-officetheme" },
{ ".thn", "application/octet-stream" },
{ ".tif", "image/tiff" },
{ ".tiff", "image/tiff" },
{ ".tlh", "text/plain" },
{ ".tli", "text/plain" },
{ ".toc", "application/octet-stream" },
{ ".tr", "application/x-troff" },
{ ".trm", "application/x-msterminal" },
{ ".trx", "application/xml" },
{ ".ts", "video/vnd.dlna.mpeg-tts" },
{ ".tsv", "text/tab-separated-values" },
{ ".ttf", "application/octet-stream" },
{ ".tts", "video/vnd.dlna.mpeg-tts" },
{ ".txt", "text/plain" },
{ ".u32", "application/octet-stream" },
{ ".uls", "text/iuls" },
{ ".user", "text/plain" },
{ ".ustar", "application/x-ustar" },
{ ".vb", "text/plain" },
{ ".vbdproj", "text/plain" },
{ ".vbk", "video/mpeg" },
{ ".vbproj", "text/plain" },
{ ".vbs", "text/vbscript" },
{ ".vcf", "text/x-vcard" },
{ ".vcproj", "Application/xml" },
{ ".vcs", "text/plain" },
{ ".vcxproj", "Application/xml" },
{ ".vddproj", "text/plain" },
{ ".vdp", "text/plain" },
{ ".vdproj", "text/plain" },
{ ".vdx", "application/vnd.ms-visio.viewer" },
{ ".vml", "text/xml" },
{ ".vscontent", "application/xml" },
{ ".vsct", "text/xml" },
{ ".vsd", "application/vnd.visio" },
{ ".vsi", "application/ms-vsi" },
{ ".vsix", "application/vsix" },
{ ".vsixlangpack", "text/xml" },
{ ".vsixmanifest", "text/xml" },
{ ".vsmdi", "application/xml" },
{ ".vspscc", "text/plain" },
{ ".vss", "application/vnd.visio" },
{ ".vsscc", "text/plain" },
{ ".vssettings", "text/xml" },
{ ".vssscc", "text/plain" },
{ ".vst", "application/vnd.visio" },
{ ".vstemplate", "text/xml" },
{ ".vsto", "application/x-ms-vsto" },
{ ".vsw", "application/vnd.visio" },
{ ".vsx", "application/vnd.visio" },
{ ".vtx", "application/vnd.visio" },
{ ".wav", "audio/wav" },
{ ".wave", "audio/wav" },
{ ".wax", "audio/x-ms-wax" },
{ ".wbk", "application/msword" },
{ ".wbmp", "image/vnd.wap.wbmp" },
{ ".wcm", "application/vnd.ms-works" },
{ ".wdb", "application/vnd.ms-works" },
{ ".wdp", "image/vnd.ms-photo" },
{ ".webarchive", "application/x-safari-webarchive" },
{ ".webtest", "application/xml" },
{ ".wiq", "application/xml" },
{ ".wiz", "application/msword" },
{ ".wks", "application/vnd.ms-works" },
{ ".WLMP", "application/wlmoviemaker" },
{ ".wlpginstall", "application/x-wlpg-detect" },
{ ".wlpginstall3", "application/x-wlpg3-detect" },
{ ".wm", "video/x-ms-wm" },
{ ".wma", "audio/x-ms-wma" },
{ ".wmd", "application/x-ms-wmd" },
{ ".wmf", "application/x-msmetafile" },
{ ".wml", "text/vnd.wap.wml" },
{ ".wmlc", "application/vnd.wap.wmlc" },
{ ".wmls", "text/vnd.wap.wmlscript" },
{ ".wmlsc", "application/vnd.wap.wmlscriptc" },
{ ".wmp", "video/x-ms-wmp" },
{ ".wmv", "video/x-ms-wmv" },
{ ".wmx", "video/x-ms-wmx" },
{ ".wmz", "application/x-ms-wmz" },
{ ".wpl", "application/vnd.ms-wpl" },
{ ".wps", "application/vnd.ms-works" },
{ ".wri", "application/x-mswrite" },
{ ".wrl", "x-world/x-vrml" },
{ ".wrz", "x-world/x-vrml" },
{ ".wsc", "text/scriptlet" },
{ ".wsdl", "text/xml" },
{ ".wvx", "video/x-ms-wvx" },
{ ".x", "application/directx" },
{ ".xaf", "x-world/x-vrml" },
{ ".xaml", "application/xaml+xml" },
{ ".xap", "application/x-silverlight-app" },
{ ".xbap", "application/x-ms-xbap" },
{ ".xbm", "image/x-xbitmap" },
{ ".xdr", "text/plain" },
{ ".xht", "application/xhtml+xml" },
{ ".xhtml", "application/xhtml+xml" },
{ ".xla", "application/vnd.ms-excel" },
{ ".xlam", "application/vnd.ms-excel.addin.macroEnabled.12" },
{ ".xlc", "application/vnd.ms-excel" },
{ ".xld", "application/vnd.ms-excel" },
{ ".xlk", "application/vnd.ms-excel" },
{ ".xll", "application/vnd.ms-excel" },
{ ".xlm", "application/vnd.ms-excel" },
{ ".xls", "application/vnd.ms-excel" },
{ ".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12" },
{ ".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12" },
{ ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },
{ ".xlt", "application/vnd.ms-excel" },
{ ".xltm", "application/vnd.ms-excel.template.macroEnabled.12" },
{ ".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template" },
{ ".xlw", "application/vnd.ms-excel" },
{ ".xml", "text/xml" },
{ ".xmta", "application/xml" },
{ ".xof", "x-world/x-vrml" },
{ ".XOML", "text/plain" },
{ ".xpm", "image/x-xpixmap" },
{ ".xps", "application/vnd.ms-xpsdocument" },
{ ".xrm-ms", "text/xml" },
{ ".xsc", "application/xml" },
{ ".xsd", "text/xml" },
{ ".xsf", "text/xml" },
{ ".xsl", "text/xml" },
{ ".xslt", "text/xml" },
{ ".xsn", "application/octet-stream" },
{ ".xss", "application/xml" },
{ ".xtp", "application/octet-stream" },
{ ".xwd", "image/x-xwindowdump" },
{ ".z", "application/x-compress" },
{ ".zip", "application/x-zip-compressed" },
#endregion
};
/// <summary>
/// 将多个流进行zip压缩返回压缩后的流
/// </summary>
/// <param name="streams">key文件名value文件名对应的要压缩的流</param>
/// <returns>压缩后的流</returns>
public static MemoryStream PackageManyZip(Dictionary<string, Stream> streams)
{
byte[] buffer = new byte[6500];
var returnStream = new MemoryStream();
var zipMs = new MemoryStream();
using (var zipStream = new ZipOutputStream(zipMs))
{
zipStream.SetLevel(9);
foreach (var kv in streams)
{
string fileName = kv.Key;
using (var streamInput = kv.Value)
{
zipStream.PutNextEntry(new ZipEntry(fileName));
while (true)
{
var readCount = streamInput.Read(buffer, 0, buffer.Length);
if (readCount < 1)
{
break;
}
if (readCount > 0)
{
zipStream.Write(buffer, 0, readCount);
}
}
zipStream.Flush();
}
}
zipStream.Finish();
zipMs.Position = 0;
zipMs.CopyTo(returnStream, 5600);
}
returnStream.Position = 0;
return returnStream;
}
#region 16
/// <summary>
/// 将16
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static byte[] StringToBytes(string str)
{
string temps = str.Replace(" ", "");
byte[] tempb = new byte[50];
int j = 0;
for (int i = 0; i < temps.Length - 1; i = i + 2, j++)
tempb[j] = Convert.ToByte(temps.Substring(i, 2), 16);
byte[] send = new byte[j];
Array.Copy(tempb, send, j);
return send;
}
/// <summary>
/// byte 数组 转化为 string
/// </summary>
/// <param name="reb"></param>
/// <returns></returns>
public static string BytesToString(byte[] reb)
{
return BitConverter.ToString(reb).Replace("-", " ");
}
public static string ConvertGPS(string value)
{
float a = 0;
float b = 0;
float c = 0;
if (string.IsNullOrWhiteSpace(value)) return default;
if (value.Length == 10)
{
a = value.Substring(0, 3).ToFloat();
b = value.Substring(3, 2).ToFloat();
c = value.Substring(6, 4).ToFloat();
}
if (value.Length == 9)
{
a = value.Substring(0, 2).ToFloat();
b = value.Substring(2, 2).ToFloat();
c = value.Substring(5, 4).ToFloat();
}
float ret = a + b / 60 + c / 600000;
return ret.ToString("f6");
}
#endregion
/// <summary>
/// 获取名称 根据表达式树
/// </summary>
/// <param name="exp"></param>
/// <typeparam name="T"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <returns></returns>
public static string GetNameByExpression<T, TValue>(Expression<Func<T, TValue>> exp)
{
var name = string.Empty;
if (exp != null)
{
if (exp.Body is UnaryExpression)
{
name = ((MemberExpression)((UnaryExpression)exp.Body).Operand).Member.Name;
}
if (exp.Body is MemberExpression)
{
name = ((MemberExpression)exp.Body).Member.Name;
}
}
return name;
}
/// <summary>
/// 复制对象
/// </summary>
/// <param name="sourceObj"></param>
/// <returns></returns>
public static T? CopyObject<T>(this T sourceObj)
{
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(sourceObj));
}
/// <summary>
/// 转 json string
/// </summary>
/// <param name="sourceObj"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string? ToJsonString<T>(this T? sourceObj)
{
if (sourceObj is null) return default;
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
return JsonConvert.SerializeObject(sourceObj, settings);
}
/// <summary>
/// 转 json 对象
/// </summary>
/// <param name="jsonString"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T? ToJsonObject<T>(this string jsonString)
{
if (string.IsNullOrWhiteSpace(jsonString)) return default;
return JsonConvert.DeserializeObject<T>(jsonString);
}
/// <summary>
/// 获取所有服务 ip 地址
/// </summary>
public static List<string> GetServerIpAddress()
=> System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
.Select(p => p.GetIPProperties())
.SelectMany(p => p.UnicastAddresses)
.Where(p => p.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork &&
!IPAddress.IsLoopback(p.Address))
.Select(p => p.Address.ToString()).ToList();
/// <summary>
/// 获取所有本地 ip 地址
/// </summary>
/// <param name="netType">"InterNetwork":ipv4"InterNetworkV6":ipv6</param>
public static List<string> GetLocalIpAddress(string netType = "")
{
netType = netType?.ToLower();
string hostName = Dns.GetHostName();
IPAddress[] addresses = Dns.GetHostAddresses(hostName);
var ips = new List<string>();
if (string.IsNullOrWhiteSpace(netType))
{
for (int i = 0; i < addresses.Length; i++)
{
ips.Add(addresses[i].ToString());
}
}
else
{
//AddressFamily.InterNetwork = IPv4,
//AddressFamily.InterNetworkV6= IPv6
for (int i = 0; i < addresses.Length; i++)
{
if (addresses[i].AddressFamily.ToString().ToLower() == netType)
{
ips.Add(addresses[i].ToString());
}
}
}
return ips;
}
/// <summary>
/// 获取命名空间前缀
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string? GetNamespace<T>() //where T : class
{
return typeof(T).Namespace;
}
/// <summary>
/// 获取命名空间前缀
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string? GetNamespacePrefix<T>() //where T : class
{
var name = typeof(T).Namespace;
if (string.IsNullOrWhiteSpace(name)) return default;
if (name.Contains("."))
return name.Split(".")[0];
return name;
}
/// <summary>
/// 获取命名空间前缀
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="namespaces"></param>
/// <returns></returns>
public static string? GetNamespacePrefix(string namespaces) //where T : class
{
if (string.IsNullOrWhiteSpace(namespaces)) return default;
if (namespaces.Contains("."))
return namespaces.Split(".")[0];
return namespaces;
}
/// <summary>
/// 获取 程序名称 根据类型 下的命名空间
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string? GetAppName<T>() //where T : class
{
var name = GetNamespace<T>();
if (string.IsNullOrWhiteSpace(name)) return default;
if (name.Contains("."))
return name.Split(".").LastOrDefault();
return name;
}
/// <summary>
/// 获取 程序名称 根据类型 下的命名空间
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string? GetAppName(string name) //where T : class
{
if (string.IsNullOrWhiteSpace(name)) return default;
if (name.Contains("."))
return name.Split(".").LastOrDefault();
return name;
}
/// <summary>
/// 获取 雪花 id
/// </summary>
/// <returns></returns>
public static long GetNewId()
{
using var scope = App.CreateScope();
var idGenerator = scope?.ServiceProvider.GetService<IdGenerator>();
//var generator = new IdGenerator(0);
//var id = generator.CreateId();
var id = idGenerator?.CreateId() ?? 0;
return id;
// 以上过程只需全局一次且应在生成ID之前完成。
// 初始化后在任何需要生成ID的地方调用以下方法
return YitIdHelper.NextId();
}
/// <summary>
/// Checks if the current host environment name is <see cref="EnvironmentName.Production"/>.
/// </summary>
/// <param name="hostEnvironment">An instance of <see cref="IHostEnvironment"/>.</param>
/// <returns>True if the environment name is <see cref="EnvironmentName.Production"/>, otherwise false.</returns>
public static bool IsDocker(this IHostEnvironment hostEnvironment)
{
return hostEnvironment.IsEnvironment("Docker");
}
/// <summary>
/// 判断是否为 double 类型
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsDouble(string str)
{
if (DateTimeUtil.IsTimestampString(str))
{
return false;
}
return double.TryParse(str, out _);
}
/// <summary>
/// 判断是否为 decimal 类型
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsDecimal(string str)
{
if (DateTimeUtil.IsTimestampString(str))
{
return false;
}
return decimal.TryParse(str, out _);
}
}