1. 专题

1.1. Equals和==

1.2. 反射调用TryParse

/// <summary>
/// 检查控制台输入值是否匹配,并返回该类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
static T CheckConsoleInput<T>(string msg) where T : struct
{
    T instance = new T();

    // 当有多个重载时,通过Type数组指定反射哪个重载方法,MakeByRefType返回Type类型
    MethodInfo parseMethod = typeof(T).GetMethod("TryParse", new Type[] { typeof(string), typeof(T).MakeByRefType() });

    do
    {
        Console.WriteLine(msg);
        string input = Console.ReadLine();

        // 两个参数,第二个参数为out参数
        object[] args = new object[] { input, null };
        bool successParse = (bool)parseMethod.Invoke(null, args);
        if (successParse)
        {
            instance = (T)args[1];
            return instance;
        }
        else
        {
            Console.WriteLine("输入格式有误,请重新输入!");
        }
    } while (true);

}

1.3. MD5加密

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),

在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

MD5 是不可逆算法,解密只能通过暴力破解的方式。

string clearText = "hello world";

// 构造一个MD5对象
MD5 md5 = new MD5CryptoServiceProvider();
string cipherText = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(clearText))).Replace("-", "");

1.4. 上传文件

1.4.1. form表单方式上传

使用表单上传附件,一定要将enctype属性设置为"multipart/form-data",如下所示:

<form id="form1" action="/Home/GetFormFile" method="post" enctype="multipart/form-data" >
    <input type="file"  name="myFile" />
    <input type="submit" id="btnUpload" />
</form>

对应控制器中的action如下:

/// <summary>
/// 处理表单上传的附件
/// myFile为上传的附件,或者使用Request.Files[0]获取上传附件,同样的作用
/// </summary>
/// <param name="myFile">myFile与表单中上传控件的name属性对应</param>
/// <returns></returns>
public JsonResult GetFormFile(HttpPostedFileBase myFile)
{
    // 构造上传附件保存的目录,AppDomain.CurrentDomain.BaseDirectory为程序基路径
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UploadFiles");
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    // 将文件保存至服务端,文件方式存储
    myFile.SaveAs(Path.Combine(path, myFile.FileName));
    return Json(new { Status = true });
}

文件上传后保存至程序基路径下【UploadFiles】文件夹内

1.4.2. FormData对象上传

使用FormData通过ajax上传,解决了表单提交刷新页面的问题

<div>
    <input type="file" name="file2" id="file2" />
    <input type="text" id="txtName" />
    <button id="btnUp">提交</button>
</div>

<script>
    $('#btnUp').click(function () {
        // 构造FormData对象
        var formData = new FormData();
        // 添加附件信息
        formData.append('myFile', document.getElementById('file2').files[0]);
        // 添加传值
        formData.append('name', $('#txtName').val());
        $.ajax({
            url: '/Home/GetAjaxFile',
            type: 'POST',
            data: formData,
            //必须false才会避开jQuery对 formdata 的默认处理.XMLHttpRequest会对 formdata 进行正确的处理.
            processData: false,
            //必须false才会自动加上正确的Content-Type
            contentType: false,
            success: function (resp) {
                //...
            }
        });
    });
</script>

对应控制器中action如下:

/// <summary>
/// 处理ajax上传的文件
/// </summary>
/// <param name="myFile"></param>
/// <returns></returns>
public JsonResult GetAjaxFile(HttpPostedFileBase myFile, string name)
{
    // 构造上传附件保存的目录,AppDomain.CurrentDomain.BaseDirectory为程序基路径
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UploadFiles");
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    // 将文件保存至服务端,文件方式存储
    myFile.SaveAs(Path.Combine(path, myFile.FileName));
    return Json(new { Status = true });
}

使用ajax方式进行提交,可定制化程度更高一些,在传附件的同时也可以传值

1.4.3. 使用组件上传

例如layui中的upload组件

https://www.layui.com/demo/upload.html

1.5. 下载文件

通过物理路径进行下载

/// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public FileResult DownFile(string filePath)
{
    // 获取文件的contentType
    string mimetype = MimeMapping.GetMimeMapping(filePath);
    return File(filePath, mimetype, Path.GetFileName(filePath));
}

需要注意的是,实际下载文件操作都是从数据库中读取文件信息,通过保存的路径和名称信息进行下载。

如果多个文件下载,会打包后再进行下载。添加压缩和解压缩可以参考SharpZipLib库。

1.6. Base64 编码

TODO...

1.7. echart统计图表

1.8. 富文本编辑

results matching ""

    No results matching ""