zoukankan      html  css  js  c++  java
  • 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中

    上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中

    前端:要用到一个插件,点击下载

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>企业用户后台管理系统 - 谭人才招聘系统</title>
        <meta http-equiv=Content-Type content="text/span; charset=gb2312" />
        <meta http-equiv=X-UA-Compatible content="IE=edge" />
        <script src="~/Scripts/jquery-1.8.0.min.js"></script>
        <script type="text/javascript" src="/Scripts/imgareaselect/ajaxfileupload.js"></script>
    </head>
    <body>
    <form name="myform" method="post" id="myform" enctype="multipart/form-data">
     <input type="image" src="" width="185" height="75"  id="logo" />
    <input id="image" class="logo_submit_f" type="file" name="image" onchange="ajaxfile();">
    </form>
    
    </body>
    <script>    
        function ajaxfile() {
            if ($("#image").val() != '') {           
                $.ajaxFileUpload({
                    url: '/Company/Home/UploadLogo',
                    type: "post",
                    secureuri: false, //是否需要安全协议,一般设置为false
                    fileElementId: 'image', //文件上传域的ID
                    dataType: 'json', //返回值类型 一般设置为json
                    data: { },
                    success: function (data, status) {  //服务器成功响应处理函数                    
                        $('#logo').attr('src', data.FilePath);
                        $("input[name='logo']").val(data.FilePath);
                    }
                })
            }
        }
       
    </script>
    </html>
    

      

    后端:

            /// <summary>
            /// 上传企业logo
            /// </summary>
            /// <returns></returns>
            public ActionResult UploadLogo()
            {
                HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
                if (files.Count == 0) return Json("没有没文件", JsonRequestBehavior.AllowGet);
                MD5 hash = new MD5CryptoServiceProvider();
                /**计算指定stream对象的哈希值**/
                byte[] bytehashValue = hash.ComputeHash(files[0].InputStream);
                var HashData = BitConverter.ToString(bytehashValue).Replace("-", "");
                var FileExtension = Path.GetExtension(files[0].FileName);
                var filename = HashData + FileExtension;
                var virtualpath = string.Format("/Upload/Logo/{0}/{1}", DateTime.Now.ToString("yyyyMMdd"), filename);
                //将虚拟路劲转换成物理路劲
                var fullpath = Server.MapPath(virtualpath);
                var path = Path.GetDirectoryName(fullpath);
                if (!Directory.Exists(path))
                    Directory.CreateDirectory(path);
                if (!System.IO.File.Exists(fullpath))
                    files[0].SaveAs(fullpath);
                var FileSize = this.FileSize(files[0].ContentLength);
                return Json(new { FileName = filename, FilePath = virtualpath, FileSize = FileSize }, "text/html", JsonRequestBehavior.AllowGet);
            }
            /// <summary>
            /// 计算文件大小
            /// </summary>
            /// <param name="bytes"></param>
            /// <returns></returns>
            public string FileSize(long bytes)
            {
                long kblong = 1024;
                long mblong = 1024 * 1024;
                if (bytes < kblong)
                    return decimal.Round(decimal.Divide(bytes, kblong), 2).ToString() + "KB";
                else
                    return decimal.Round(decimal.Divide(bytes, mblong), 2).ToString() + "MB";
            }
    

    获取文件的hash哈希值方法:

            /// <summary>
            /// 计算文件的hash值 用于比较两个文件是否相同
            /// </summary>
            /// <param name="filePath">文件路径</param>
            /// <returns>文件hash值</returns>
            public static string GetFileHash(string filePath)
            {
                //创建一个哈希算法对象 
                using (HashAlgorithm hash = HashAlgorithm.Create())
                {
                    using (FileStream file = new FileStream(filePath, FileMode.Open))
                    {
                        //哈希算法根据文本得到哈希码的字节数组 
                        byte[] hashByte= hash.ComputeHash(file);
                        //将字节数组装换为字符串  
                        return BitConverter.ToString(hashByte);
                    }
                }
            }
    

    做一个记录,没有高水平技术,简简单单写个博客!

  • 相关阅读:
    stl-序列式容器
    BFS
    Hash
    二分法
    草稿1
    红黑树的左旋、右旋和颜色变换
    动态规划
    自动驾驶-安全
    二叉树

  • 原文地址:https://www.cnblogs.com/axinno1/p/7460940.html
Copyright © 2011-2022 走看看