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

Posted aXinNo1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中相关的知识,希望对你有一定的参考价值。

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

        /// <summary>
        /// 上传企业logo
        /// </summary>
        /// <returns></returns>
        public ActionResult UploadLogo(string comid)
        {
            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 = comid + "_" + 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);
                }
            }
        }

 

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

以上是关于上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中的主要内容,如果未能解决你的问题,请参考以下文章

图片哈希概论及python中如何实现对比两张相似的图片

如何判断赋给image控件的图片链接值是不是可用?

关于elementt的upload图片上传标签的解读,上传视频。上传大文件切片——生成一个哈希值,Message的消息提示。

php图片上传检测是否为真实图片格式

ThinkPHP提交表单判断上传图片经验总结

input type='file' 上传文件 判断图片的大小是否合格与witdh 和 height 是否合格