上传图片用图片文件的对象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);
}
}
}

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

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

  1. python hash 哈希值

    自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...

  2. Java 对象的哈希值是每次 hashCode() 方法调用重计算么?

    对于没有覆盖hashCode()方法的对象 如果没有覆盖 hashCode() 方法,那么哈希值为底层 JDK C++ 源码实现,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值 ...

  3. 关于 百度 Ueditor 上传图片时 打开文件夹的延迟问题

    在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image ...

  4. 关于 百度 Ueditor (在chrome浏览器) 上传图片时 打开文件夹的延迟问题

    在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image ...

  5. webpack提取图片文件打包压缩

    抽离图片文件打包到指定路径下 压缩抽离的图片资源 配置生成html中的图片路径 一.准备测试环境 //工作区间 src//文件夹 index.js//入口文件 index.css//样式文件 inde ...

  6. C# 通过比对哈希码判断两个文件内容是否相同

    1.使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致. 2. 在比较文件内容的时候可以采用好几种方法.例如 ...

  7. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  8. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  9. JS将图片文件转为64位字符串再post到接口上传图片

    HTML: <div class="ai-item upload-id-img"> <p>上传身份证照片</p> <div class=& ...

随机推荐

  1. eclipse 远程调试tomcat6

    一.tomcat6配置 1.修改tomcat\bin目录下的startup.bat如下,红色部分是新增的,修改后另存为jpda.bat set JPDA_ADDRESS=8114set JPDA_TR ...

  2. Spring 依赖注入(一、注入方式)

    Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...

  3. Java 使用 long 出现空指针异常

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} p.p2 {margin: ...

  4. C++静态数据成员实现

    静态数据成员是在一个类中用关键字static声明的数据成员.在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享.C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名 ...

  5. AS3舞台的大小,可视区域大小及SWF文件的原始尺寸大小

    AS3舞台的大小,可视区域大小及SWF文件的原始尺寸大小三者之间没有什么关系. 当前可视区域:stage.stageWidth,stage.stageHeight.SWF文件编译后的原始尺寸大小:lo ...

  6. I/O多路复用方案

    1. 本节思维导图 2. 基本的网络编程接口 2.1 基于TCP的通信模型 2.2 基于UDP的通信模型 3. 非阻塞的服务器程序 file.pipe.fifo.socket在默认创建过程中都是阻塞的 ...

  7. 如何加快MyEclipse的启动速度

    学习java开发的朋友对Myeclipse应该不陌生,MyEclipse企业级工作平台(MyEclipseEnterprise Workbench ,简称MyEclipse)是对EclipseIDE的 ...

  8. Python学习-数据运算

    在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. a = 10 b = 20 print(a-b) #-10 pr ...

  9. 剑指offer-第四章解决面试题思路(复杂链表的复制)

    题目:请写一个函数clone(ComplexListNode pHead),实现复杂链表的复制. 复杂链表的数据结构如下:public class ComplexListNode{int m_nVal ...

  10. 【经典】Noip动态规划

    一.线性动态规划 最长严格上升子序列 #include<iostream> #include<cstdio> using namespace std; int n,ans; ] ...