关于图片上传实现方案

Love The Way You Lie 2021-11-17 22:06 347阅读 0赞

一、实现方案(一)

  1、通过window.URL.createObjectURL(兼容性较好),实现起来稍微复杂些。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>uploadImg</title>
  5. </head>
  6. <style type="text/css">
  7. #container{
  8. display: flex;
  9. flex-direction: column;
  10. align-items: center;
  11. }
  12. .upload{
  13. width: 400px;
  14. height: 30px;
  15. display: inline-block;
  16. line-height: 30px;
  17. background: #f0f0f0;
  18. border: 1px solid #ccc;
  19. position: relative;
  20. text-align: center;
  21. }
  22. #upload{
  23. position: absolute;
  24. left: 0;
  25. top: 0;
  26. width: 100%;
  27. height: 100%;
  28. opacity: 0;
  29. cursor: pointer
  30. }
  31. #postImg{
  32. margin-top: 20px;
  33. }
  34. #imgBox {
  35. overflow: hidden;
  36. }
  37. #imgBox .imgContainer{
  38. float: left;
  39. width: 32%;
  40. margin-left: 5px;
  41. margin-top: 20px;
  42. position: relative;
  43. }
  44. #imgBox .imgContainer .delete{
  45. position: absolute;
  46. left: 0px;
  47. bottom: 0px;
  48. height: 30px;
  49. line-height: 30px;
  50. background: rgba(25,25,25,.5);
  51. margin: 0;
  52. width: 100%;
  53. text-align: center;
  54. color: #f0f0f0;
  55. cursor: pointer;
  56. display: none;
  57. }
  58. #imgBox .imgContainer:hover .delete{
  59. display: block;
  60. }
  61. #imgBox img{
  62. width: 100%;
  63. height: 150px;
  64. vertical-align: bottom;
  65. }
  66. #zoomBox{
  67. width: 100%;
  68. height: 100%;
  69. position: absolute;
  70. left: 0;
  71. top: 0;
  72. background: rgba(23,23,23,.7);
  73. z-index: 1000;
  74. display: flex;
  75. align-items: center;
  76. justify-content: center;
  77. flex-direction: column;
  78. }
  79. #zoomBox img{
  80. max-width:100%;
  81. z-index: 1001;
  82. }
  83. #zoomBox p{
  84. color: #fff;
  85. cursor: pointer;
  86. z-index: 1001;
  87. }
  88. </style>
  89. <body>
  90. <form id="container">
  91. <span class="upload">点击上传<input id="upload" type="file" multiple accept="image/png,image/jpg,image/gif,image/JPEG"></span>
  92. <div id="imgBox"></div>
  93. <input id="postImg" type="button" name="" value="上传">
  94. </form>
  95. </body>
  96. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
  97. <script type="text/javascript">
  98. var imgSrc = [];
  99. var imgFile = [];
  100. var imgName = [];
  101. //监听选择图片的change事件
  102. $("#upload").on("change",function(){
  103. getImgObj()
  104. })
  105. //获取图片相关信息
  106. function getImgObj(){
  107. var imgObj = $("#upload")[0].files;
  108. for(var i=0; i<imgObj.length; i++){
  109. var imgSrcI = getUrl(imgObj[i])
  110. imgSrc.push(imgSrcI)
  111. imgFile.push(imgObj[i])
  112. imgName.push(imgObj[i].name)
  113. }
  114. addNewContent()
  115. }
  116. //获取图片URL
  117. function getUrl(file){
  118. var url = null;
  119. if (window.createObjectURL != undefined) {
  120. url = window.createObjectURL(file);
  121. } else if (window.URL != undefined) {
  122. url = window.URL.createObjectURL(file);
  123. } else if (window.webkitURL != undefined) {
  124. url = window.webkitURL.createObjectURL(file);
  125. }
  126. return url;
  127. }
  128. //添加dom
  129. function addNewContent(){
  130. $("#imgBox").html("")
  131. for(var i =0; i<imgSrc.length; i++){
  132. var oldObj = $("#imgBox").html()
  133. $("#imgBox").html(oldObj + '<div class="imgContainer"><img οnclick="zoom(this,'+i+')" title=' + imgName[i] + ' alt=' + imgName[i] + ' src=' + imgSrc[i] + '><p class="delete" οnclick="Delete(this,'+i+')">删除</p></div>');
  134. }
  135. }
  136. //删除
  137. function Delete(obj,index){
  138. imgSrc.splice(index, 1);
  139. imgFile.splice(index, 1);
  140. imgName.splice(index, 1);
  141. addNewContent()
  142. }
  143. //放大
  144. function zoom(obj,index){
  145. var html = "<div id='zoomBox'><img src=" + imgSrc[index] + "><p οnclick='closeZoom()'>关闭</p></div>"
  146. $("body").append(html)
  147. }
  148. //关闭
  149. function closeZoom(){
  150. $("#zoomBox").remove()
  151. }
  152. //提交
  153. $("#postImg").click(function(){
  154. var data = new FormData()
  155. data.append("imgFile",imgFile)
  156. console.log(data)
  157. return false
  158. })
  159. </script>
  160. </html>

2、通过原生js实现预览

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>图片上传</title>
  5. </head>
  6. <body>
  7. <form id="imgForm">
  8. <div id="box"></div>
  9. <input id="imgInput" type="file" name="" value="上传图片" multiple>
  10. </form>
  11. </body>
  12. <script type="text/javascript">
  13. var img = document.getElementById("imgInput")
  14. var imgArr = [];
  15. var imgUrl = [];
  16. var imgobj = [];
  17. img.onchange=function(){
  18. var imgs = img.files
  19. for(var i = 0; i<imgs.length; i++){
  20. imgArr.push(imgs[i])
  21. }
  22. //通过window对象下的URL相关属性
  23. var createObjUrl = function(blob){
  24. return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
  25. }
  26. for(var i in imgArr){
  27. imgUrl.push(createObjUrl(imgArr[i]))
  28. var imgObj = new Image()
  29. imgObj.src = imgUrl[i]
  30. document.getElementById("box").appendChild(imgObj)
  31. }
  32. }
  33. </script>
  34. </html>

3、原理

  1、浏览器提供的window.URL.createObjectURL(参数) 参数部分为图片对象。

  2、通过input[file]监听onchange事件的触发,从而获取files对象。并通过便利files对象(一个类似数组),将图片对象过滤出来。

二、实现方案(二)

  1、通过FileReader对象(兼容性待考究)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>图片上传之FileReader</title>
  5. </head>
  6. <style type="text/css">
  7. #box{
  8. width: 200px;
  9. }
  10. #box img{
  11. max-width: 100%;
  12. }
  13. </style>
  14. <body>
  15. <input type="file" name="" id="imgBtn" multiple>
  16. <div id="box"></div>
  17. </body>
  18. <script type="text/javascript">
  19. var imgBtn = document.getElementById('imgBtn')
  20. imgBtn.onchange = function(){
  21. var imgFile = imgBtn.files[0];
  22. var imgObj = new FileReader()
  23. imgObj.onload = function(imgFile){
  24. var prevImg = new Image()
  25. prevImg.src = imgFile.target.result;
  26. document.getElementById('box').appendChild(prevImg)
  27. }
  28. imgObj.readAsDataURL(imgFile)
  29. }
  30. </script>
  31. </html>

转载于:https://www.cnblogs.com/helloNico/p/11244336.html

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Springboot实现图片

    一、前言 > 对于图片上传,大家应该对表单数据进行上传图片很熟悉,包括本人,因为我们学习JavaWeb的第一种交互就是写一个JSP页面,里面一个表单进行提交,然后表单可以提交

    相关 图片方案详解

    > 小编推荐:[Fundebug][]专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。真的是一个很好用的bug监控费服务,众多大佬公