js如何实现多图与单图的上传显示
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了js如何实现多图与单图的上传显示,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3704字,纯文字阅读大概需要6分钟。
内容图文
![js如何实现多图与单图的上传显示](/upload/InfoBanner/zyjiaocheng/419/76c371c488b7451ab6735dc1a9db0e69.jpg)
前言:
项目中经常会大量的使用到图片上传,之前涉及到的时候经常会在网上下载一些素材直接拿过来使用,但是随着项目的增多发现用的是各式各样的,导致非常混乱。所以抽空写了一个DEMO来梳理下图片上传的流畅以及单图和多图上传需要注意的点。
多图上传
多图上传,这里仅仅是做了前端的展示效果,实际项目中,多图上传应该是每次上传一张图片后向后台发送一次请求,后台返回img路径然后进行展现。
(推荐教程:js教程)
为什么一定要传入后台在进行展现呢?
1、如果直接在前台先展现base64图片路径,在向后台发送请求。如果接口出现错误后,会给用户产生错觉,以为图片上传成功,而这时后台是没有接收到图片的;
2、file文件每次发生变化,会将之前的files文件给覆盖掉。如果直接展现不用ajax提交后,最终用form提交只会提交最后一张。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>多图上传/单图上传</title> <style> *{ margin: 0; padding: 0; } .box{ width: 1000px; height: 120px; margin: 0 auto; border: 1px solid #ddd; margin-top: 20px; box-sizing: border-box; padding: 10px; } .upload{ width: 100px; height: 100px; float: left; position: relative; overflow: hidden; } .upload input{ position: absolute; z-index: 1000; top:0; left:0; width: 100%; height: 100%; opacity: 0; } .upload a{ display: block; width: 100%; } .upload img{ display: block; width: 100%; height: 100%; } .imgList{ float: left; overflow: hidden; } .imgList .item{ width: 100px; height: 100px; margin-right: 20px; float: left; position: relative; } .imgList .item img{ display: block; width: 100%; height: 100%; } .imgList .item span{ position: absolute; top: 0;right: 0; width: 100%; background: red; color:#fff; height: 20px; width: 20px; text-align: center; border-radius: 50%; cursor: pointer; } </style> </head> <body> <div> <!-- 放图片的位置 --> <div id="imgList"></div> <!-- 上传按钮 --> <div> <input type="file" name="file" value="" multiple accept="image/*" onchange="uploadImg(this);"> <a href="javascript:void(0)" rel="external nofollow" ><img src="z_add.png" alt=""></a> </div> </div> <script> function uploadImg(obj){ var files = obj.files;//获取上传文件后的fileList var imgList = [];//声明空数组用来接收上传完成后的图片 for(var i = 0; i<files.length;i++){ var imgUrl = window.URL.createObjectURL(files[i]);//将文件转换成base64 URL格式 imgList.push(imgUrl);//将url压入到数组中 **如果需要图片统一选择完毕后,点击上传按钮统一提交,那么直接拿这imgList给后台传递即可。** // 循环创建img容器用来放置url在页面上显示 var img = document.createElement('img') img.setAttribute("src", imgList[i]); //删除按钮 var close = document.createElement('span') close.innerHTML="x" close.className='close' close.setAttribute('onclick',"imgRemove(this)") //创建放置img的盒子 var item = document.createElement('div'); item.className='item'; item.append(img) item.append(close) var box = document.getElementById("imgList"); box.append(item); //ajax向后台发送请求 } } //删除代码 function imgRemove(obj){ obj.parentNode.remove() } </script> </body> </html>
单图上传
去掉input中的multiple 属性就变成了单图上传;
<input type="file" name="file" value="" accept="image/*" onchange="uploadImg(this);">
按照上边的代码直接就可以实现单图上传和多图上传。下边在说下单图上传和多图上传提交需要注意的;
1、单图上传可以跟随form表单一起提交,给input一个name值后台就可以提交过去;
2、多图上传不可以跟form一起提交,因为每次上传后file只会保留最新的;可以先通过ajax将图片提交成功后,在form内去循环创建隐藏的input将后台返回的路径设置成改input的val值最后跟随form提交;需要注意隐藏的input的name值写成[]形式,比如:name=“img[]”。这样在form提交的时候后台就可以接受到所有的图片;
以上的代码,适用于前端点击file上传图片后的显示。具体与后台的一些交互可以根据实际项目中的需求进行增加!
以上就是js如何实现多图与单图的上传显示的详细内容。
内容总结
以上是互联网集市为您收集整理的js如何实现多图与单图的上传显示全部内容,希望文章能够帮你解决js如何实现多图与单图的上传显示所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。