HTML:
<div class="ai-item upload-id-img"> <p>上传身份证照片</p> <div class="img-box"> <div class="positive-img"> <input type="file" id="img1" name="zm" class="inputFile"> <label for="img1"> <img src="http://pic.biyabi.com/h5/images/fm-img.png" id="preview"> </label> </div> <div class="opposite-img"> <input type="file" id="img2" name="fm" class="inputFile"> <label for="img2"> <img src="http://pic.biyabi.com/h5/images/zm-img.png" id="preview2"> </label> </div> </div> </div>
可以通过给input上传控件设置样式不显示,给对应的的img标签注册点击事件来点击上传控件,相当于间接点击了上传控件
.inputFile { width: 1px; height: 1px; opacity:; overflow: hidden; position: absolute; z-index: -1; }
js 实现:
//编辑页面上传图片 $('#img1').on('change', function () { setImgPreview('img1', 'preview'); }); $('#img2').on('change', function () { setImgPreview('img2', 'preview2'); }); //上传图片 function setImgPreview(imgObj, prev) { var docObj = $("#" + imgObj); var imgObjPreview = $("#" + prev); //异步上传图片 uploadImage(docObj, imgObjPreview) } function uploadImage(docObj, imgObjPreview) { //判断是否有选择上传文件 var imgPath = docObj.val(); if (imgPath == "") { //alert("请选择上传图片!"); hDialog.show({ type: 'toast', toastText: '请选择上传图片!', toastTime: 3000, hasMask: false }); return; } //判断上传文件的后缀名 var strExtension = imgPath.substr(imgPath.lastIndexOf('.') + 1).toLowerCase(); if (strExtension != 'jpg' && strExtension != 'gif' && strExtension != 'png' && strExtension != 'bmp') { //alert("请选择图片文件!"); hDialog.show({ type: 'toast', toastText: '请选择图片文件!', toastTime: 3000, hasMask: false }); return; } var ImgObj = new Image(); //建立一个图像对象 var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B ) ImgObj.src = docObj[0].value; //checkSizeofImg(); //function checkSizeofImg() { // if (ImgObj.readyState != "complete") { //如果图像是未加载完成进行循环检测 // setTimeout("checkSizeofImg()", 500); // //return false; // } //} //ImgObj.onload = function () { // ImgFileSize = Math.round(ImgObj.fileSize / 1024 * 100) / 100;//取得图片文件的大小 // if (AllowImgFileSize != 0 && AllowImgFileSize < ImgFileSize) { // hDialog.show({ type: 'toast', toastText: '上传失败,请上传不大于2M的图片!', toastTime: 3000, hasMask: false }); // return; // } //} //var file = $("#" + imgObj).files[0]; var reader = new FileReader(); var file = docObj[0].files[0]; var imgUrlBase64; if (file) { //将文件以Data URL形式读入页面 imgUrlBase64 = reader.readAsDataURL(file); reader.onload = function (e) { //var result = document.getElementById("result"); var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length; if (AllowImgFileSize != 0 && AllowImgFileSize < ImgFileSize) { hDialog.show({ type: 'toast', toastText: '上传失败,请上传不大于2M的图片!', toastTime: 3000, hasMask: false }); return; } //显示文件 imgObjPreview.attr("src", reader.result); //字符串形式上传 //data:image/png;base64, var imgDataBase64 = imgObjPreview.attr("src").substring(imgObjPreview.attr("src").indexOf(",") + 1); $.ajax({ type: 'post', dataType: 'json', data: { "_Image": imgDataBase64, "_format": "." + strExtension }, url: ajaxUrl + 'UploadIDCartImageBase64', success: function (data) { if (data) { imgObjPreview.attr("src", data); $("." + docObj.attr("name")).val(data); docObj.parent().find('.logo-img2').remove(); } }, //此接口返回的图片路径是error的响应文本 error: function (xhr) { imgObjPreview.attr("src", xhr.responseText); $("." + docObj.attr("name")).val(xhr.responseText); docObj.parent().find('.logo-img2').remove(); }, beforeSend: function () { var logoImg = '<img src="../images/loanding.gif" class="logo-img2" style="position: absolute;left: 50%;top: 50%;width: 20px; height: 20px; -webkit-transform: translate(-50%,-50%);">'; docObj.parent().append(logoImg); } }); } reader.onerror = function () { alert("error"); } } }
最终展示图
JS将图片文件转为64位字符串再post到接口上传图片的更多相关文章
-
js如何将选中图片文件转换成Base64字符串?
如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传 ...
-
检查DLL,EXE文件是64位或者32位的方法
检查DLL,EXE文件是64位或者32位:输入corflags <assembly path>:
-
.netcore 文件上传转为base64位字符串
.netcore文件上传Api接口,和正常的webForm提交类似,只是用postman测试接口时,记得给form表单命名,否则获取上传文件数量一直为0 后端代码 using System; usin ...
-
js 将图片文件转换成base64
1.情景展示 在JavaScript中,如何使用图片文件转换成base64? 2.解决方案 /** * 网络图像文件转Base64 * @param img dom对象 */ function g ...
-
利用linux判断elf文件是64位还是32位
readelf 命令,参数为-h 例如 文件名为python >>>readelf -h python 得到的是ELF Header中的项Magic 第五个数 02时为64位,01时 ...
-
Android从本地选择图片文件转为Bitmap,并用zxing解析Bitmap
如何从本地选择图片文件 使用Intent调用系统相册后,onActivityResult函数返回的是Uri格式的路径 /** * 打开系统相册 */ private void openSysAlbum ...
-
api图片传输,转成64位字符串进行传输
byte[] getImageByte = HttpHelper.getImageByte(HttpContext.Current.Server.MapPath(("~/UploadFile ...
-
64位系统下注册32位dll文件
64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位C ...
-
win7(64位)Sql server 用T-sql读取本地数据文件dbf的数据文件
原文地址:https://www.cnblogs.com/cl1006/p/9924066.html 第一步启用Ad Hoc Distributed Queries 在SQLserver执行以下的语 ...
随机推荐
-
IDE有毒
程序员按项目性质大致有三种:写Demo的.写Proto的.写成品的:按项目开发周期大致有:写开头的.写中间的.写结尾的. Demo是样品,主要是表面上初步实现,临时忽悠客户用的,不一定要求继续演化: ...
-
Android Studio使用小技巧:提取方法代码片段
http://www.jb51.net/article/65510.htm 今天来给大家介绍一个非常有用的Studio Tips,有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再 ...
-
UITableViewCell重用机制
UITableView是iOS开发中使用频率非常高的一个控件,它常被用来展示信息列表,尽管信息数据可能非常多,但UITableView消耗的资源却并不会随着展示信息的增多而变大,这都要得益于UITab ...
-
Android混淆那些事儿
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 # Android混淆 Android混淆是Android开发者经常使用的一种用于代码防止被反编译的 ...
-
Windows SVN变更发送邮件通知(JAVA实现)
之前有过一篇python的实现http://blog.csdn.net/wiker_yong/article/details/10334967 1,新增文件post-commit.bat 内容: re ...
-
用python写一个定时提醒程序
身体是革命的本钱,身体健康了我们才有更多精力做自己想做的事情,追求女神,追求梦想.然而程序员是一个苦比的职业,大部分时间都对着电脑,我现在颈椎就不好了,有时候眼睛还疼,我还没20阿,伤心...于是乎写 ...
-
Java SE之初探反射机制
[Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]: 反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...
-
Codeforces Round #425 (Div. 2) Problem C Strange Radiation (Codeforces 832C) - 二分答案 - 数论
n people are standing on a coordinate axis in points with positive integer coordinates strictly less ...
-
【git】之使用eclipse-git插件查看本地文件和远程文件区别
选中文件右键 Team->Show Local History 在历史中右键 Compare Current with Local
-
optind变量
1.这个变量是在什么地方定义的? 答:系统定义的 2.这个变量在什么场景下使用? 答:在解析命令行参数时会用到 3.这个变量存在的意义? 在每调用一次getopt()或getopt_long()类似函 ...