上传图片用图片文件的对象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);
}
}
}
做一个记录,没有高水平技术,简简单单写个博客!
上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中的更多相关文章
- python hash 哈希值
自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...
- Java 对象的哈希值是每次 hashCode() 方法调用重计算么?
对于没有覆盖hashCode()方法的对象 如果没有覆盖 hashCode() 方法,那么哈希值为底层 JDK C++ 源码实现,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值 ...
- 关于 百度 Ueditor 上传图片时 打开文件夹的延迟问题
在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image ...
- 关于 百度 Ueditor (在chrome浏览器) 上传图片时 打开文件夹的延迟问题
在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image ...
- webpack提取图片文件打包压缩
抽离图片文件打包到指定路径下 压缩抽离的图片资源 配置生成html中的图片路径 一.准备测试环境 //工作区间 src//文件夹 index.js//入口文件 index.css//样式文件 inde ...
- C# 通过比对哈希码判断两个文件内容是否相同
1.使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致. 2. 在比较文件内容的时候可以采用好几种方法.例如 ...
- struts2 文件的上传下载 表单的重复提交 自定义拦截器
文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
EF+LINQ事物处理 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...
- JS将图片文件转为64位字符串再post到接口上传图片
HTML: <div class="ai-item upload-id-img"> <p>上传身份证照片</p> <div class=& ...
随机推荐
- HTML——部分MP4在谷歌浏览器上无法播放
Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件). 为什么是部分MP4呢?MP4有非常复杂的含义(见http://en.wikipedia.org/wiki ...
- python基础之socket编程(TCP三次握手和四次挥手)
TCP协议中中的三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接 ...
- New Concept English three (38)
26w/m 45 Future historians will be in a unique position when they come to record the history of our ...
- delete和truncate区别
相同之处:truncate在功能上与不带WHERE子句的delete 语句相同:二者均删除表中的全部行.小心使用truncate,删除后就没有了 1.delete : 删除"表格记录&quo ...
- SpringMVC札集(01)——SpringMVC入门完整详细示例(上)
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- Python中实现装饰模式的三种方式
功能目标 编写一个可以打印被装饰函数名称.执行时间.内存地址得装饰器 前置依赖包 import time import functools from decorator import decorato ...
- prefixfree.min.js 的用途
简单而言,这东西就是自动加前缀的,在link中,或是style中,或是dom元素的style中书写CSS3 code,或是jQuery .css()方法此脚本会自动补上需要的前缀,让响应的浏览器支持该 ...
- golang实现图片上传
golang实现图片上传 该代码为使用beego实现前后端图片上传.话不多说,直接上代码. 1.前端代码 html代码: <div class="col-5 f-l text text ...
- eclipse javaw.exe in your current path问题
问题: 第一次运行eclipse的时候,可能会提醒找不到javaw.exe ******等的问题 很坑的! 解决方案: 无法启动Eclipe,因找不到javaw.exe 还是环境变量的问题!!! 注意 ...
- PDF通过剪裁来实现打印字体变大
之前打印论文,很多都是一页两版,这个时候字体会非常小:打印缩放放大后,字又容易出了打印边界. 这种情况可以采用Adobe IX Pro(只要是pro应该都可以)进行边缘裁剪来实现字体放大.只需要剪裁( ...