广告
返回顶部
首页 > 资讯 > 精选 >使用Html5怎么实现单张、多张图片上传功能
  • 898
分享到

使用Html5怎么实现单张、多张图片上传功能

2023-06-09 21:06:00 898人浏览 独家记忆
摘要

这篇文章主要介绍了使用HTML5怎么实现单张、多张图片上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件

这篇文章主要介绍了使用HTML5怎么实现单张、多张图片上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件数不胜数,例如:Jquery的 verupload.js,jQuery File Upload、Uploadify、jQuery.filter等等。But。上面说到的这些插件,今天我们不谈,我们来看一看使用html5中的FileReader 如何实现 图片的单张及多张预览、删除、上传等功能。先看下实现后的效果如下:

使用Html5怎么实现单张、多张图片上传功能

2|0实现

2|1前端部分

这块是用户点击按钮 其中我们最重要的一句话是input type=file 和给了一个multiple属性,可以满足多张图片上传

<div class="fORM-group form-row">        <label class="col-sm-2 control-label uText">俱乐部相册</label><div class="row">                        <div class="col-xs-10 col-sm-8 mTop5">                            <label title="上传俱乐部相册" for="ClubImagesUpload" id="btnClubImg" class="col-sm-2">                                <input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">                                <img src="/Images/reGISterNewSite/btn_addimg.png" class="addImg"/>                            </label>                        </div>                    </div></div>

下面这块区域是用于图片预览的

<div class="form-group form-row" id="preViewMore"><div class="row">      <div class="col-xs-9">         <div id="clubInputImagePreview" class="col-sm-9 img-preview img-preview-sm"></div>       </div>  </div></div>

2|2样式部分

什么?连样式你都要看,还有没有人性(苦笑脸)

2|3Js部分

首先我们分析下上面的html,我们用一个label把input和一个img标签包起来了,我们希望点击效果图那个+号图片,就能弹出选择相片的对话框,所以,我们需要先给label来一个点击事件:

$("#btnClubImg").click(function() {    //TODO Something});

接着我们再看,因为我们是要获取上传的文件,而我们的文件主要是在input上,所以,我们先将input标签获取到:

$("#btnClubImg").click(function() {      var $input = $("#ClubImagesUpload");     console.log($input);//打印当前元素});

我们将当前input元素标签打印出来看看是个什么东东

使用Html5怎么实现单张、多张图片上传功能

我们展开第一项会发现files里面length长度是0

使用Html5怎么实现单张、多张图片上传功能

好,我们继续分析,因为我们想要能当input框改变的时候,说简单点 就是有选择到文件的时候,我们能获取到当前选择的文件,这个和获取input框文字输入是一样的道理,所以,经过分析,我们知道需要给input标签加一个change事件:

 $("#btnClubImg").click(function() {      var $input = $("#ClubImagesUpload");      console.log($input);      $input.on("change", function () {         console.log(this);//打印改变后的当前元素  });});

让我们来瞄一眼,获取到改变后的input元素里面有些啥东东:

使用Html5怎么实现单张、多张图片上传功能

这里很清楚得可以看到,我们获取到了选择的图片,包括有最后修改事件,图片名称,大小以及图片类型(有了文件类型,我们就可以判断当前用户选择的是否是图片不是吗(斜眼笑)) 同样,这是单个文件的, 如果是多个文件,就会有多个file

使用Html5怎么实现单张、多张图片上传功能

接着往下看,通过打印输出我们可以看到,我们再input 标签的files元素上已经拿到了我们想要的文件信息,我们只需要获取它们就行了:

 var files = this.files; var length = files.length;

这样,我们就可以获取到所有文件,以及文件的个数,那这里问题来了,我们如果是选择多个文件,如果将其依次输出并展示到页面上呢?看到上面标注的四个字,脑袋中有没有闪现出两个字呢?循环

 $.each(files, function (key, value) {        //TOTO Something  });

通过将上面得到的files 循环,我们可以依次得到每个文件的信息。这样,你就不仅可以将其依次输出,如果你愿意,你还可以将其送上天~

var fileReader = new FileReader();//实例化一个FileReader对象var file_ = files[key];//获取当前文件if (/^image\/\w+$/.test(file_.type)) {//将当前文件进行正则匹配,看是否是选择的图片      fileReader.onload = function() {//当读取操作完成时调用       }         }

有必要延伸下FileReader的知识点:

FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。

使用FileReader对象,WEB应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据。

使用Html5怎么实现单张、多张图片上传功能

回到主题,我们已经能够得到文件并且得到返回,所以此时,我们只需要展示返回的结果就行了

$("#clubInputImagePreview").CSS("background-image", "url(" + this.result + ")");

我们将其this.result打印出来看看是个什么东东:

使用Html5怎么实现单张、多张图片上传功能

不言而喻,是将图片转换成了Base64的数据格式。最后,我们调用 readAsDataURL 读取文件内容,将其用data:url字符串表示出来

fileReader.readAsDataURL(value);

这样,你就可以得到一个简易的图片上传的Demo了,但是并不是最终的,因为你还需要加很多业务进去。比如:得到一张预览图片后,当前标签会被占用,如果下次循环进来,直接使用原标签,肯定会将之前的图片替换,那这肯定不是我们想要的效果,我们希望是能依次展示,而不是替换展示。所以,我们还需要做一些处理:

 $("#clubInputImagePreview").css("background-image", "url(" + this.result + ")");//使用apend再当前元素下追加一个子节点 $("#clubInputImagePreview") .append("<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove' />");//使用after 向当前兄弟节点 追加一个同级节点                                       $("#clubInputImagePreview").after( "<div id='clubInputImagePreview1' class='col-sm-9 img-preview img-preview-sm delImg' ></div>");

然后我们追加的删除图片,也需要给其点击事件,让我们的当前预览区域消失:

$("#ImgRemove").click(function () {          $(this).parent().remove();});

最后,你会发现结果还不是我们想要的,那是因为 当前ID还在,所以无法进行下一步操作,而我们只需要将当前元素的Id Remove掉,然后新增一个同ID的元素,这样浏览器就会认为这是一个新的元素:

 $input.removeAttr("id"); var newInput ='<input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">'; $(this).append($(newInput));

最后完整JS代码如下:

  var intP = 0;        $("#btnClubImg").click(function() {            var $input = $("#ClubImagesUpload");//            console.log($input);            $input.on("change",                function () {//                    console.log(this);                    var files = this.files;                    var length = files.length;                    if (intP > 8) {                        layer.msg('图片不能再多了~', {});                        return;                    }                    $.each(files,                        function (key, value) {                            var fileReader = new FileReader();                            var file_ = files[key];                            if (/^image\/\w+$/.test(file_.type)) {                                fileReader.onload = function() {                                    if (intP > 8) {                                        layer.msg('图片不能再多了~', {});                                        return;                                    }                                    if (key == 0 && intP == 0) {                                        console.log(this.result);                                        $("#clubInputImagePreview").css("background-image", "url(" + this.result + ")");                                        $("#clubInputImagePreview")                                            .append(                                            "<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove' />");                                        $("#clubInputImagePreview").after(                                            "<div id='clubInputImagePreview1' class='col-sm-9 img-preview img-preview-sm delImg'></div>");                                    } else {                                        $("#clubInputImagePreview" + parseInt(intP) + "").css("background-image",                                            "url(" + this.result + ")");                                        $("#clubInputImagePreview" + parseInt(intP) + "").append(                                            "<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove" +                                            parseInt(parseInt(1) + parseInt(intP)) +"' />");                                        $("#clubInputImagePreview" + parseInt(intP) + "").after(                                            "<div id='clubInputImagePreview" +                                            parseInt(parseInt(1) + parseInt(intP)) +                                            "'class='col-sm-9 img-preview img-preview-sm delImg' ></div>");                                    }                                    if (key == 0 && intP == 0) {                                        $("#ImgRemove").click(function () {                                            $(this).parent().remove();                                        });                                    } else {                                        $("#ImgRemove" + parseInt(parseInt(1) + parseInt(intP)) + "").click(function () {                                            $(this).parent().remove();                                        });                                    }                                    intP += parseInt(1);                                };                                fileReader.readAsDataURL(value);                            } else {                                layer.msg("格式错误<br/>请选择一个图片文件");                            }                        });                });            $input.removeAttr("id");            var newInput =                '<input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">';            $(this).append($(newInput));        });

感谢你能够认真阅读完这篇文章,希望小编分享的“使用Html5怎么实现单张、多张图片上传功能”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 使用Html5怎么实现单张、多张图片上传功能

本文链接: https://www.lsjlt.com/news/257855.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Html5怎么实现单张、多张图片上传功能
    这篇文章主要介绍了使用Html5怎么实现单张、多张图片上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件...
    99+
    2023-06-09
  • 如何使用HTML5实现多张图片上传功能
    小编给大家分享一下如何使用HTML5实现多张图片上传功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! HTML结构: &l...
    99+
    2022-10-19
  • PHP如何实现多张图片上传功能
    这篇文章主要介绍“PHP如何实现多张图片上传功能”,在日常操作中,相信很多人在PHP如何实现多张图片上传功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现多张图片上传功能”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • angularjs怎么实现多张图片上传并预览功能
    这篇文章主要介绍angularjs怎么实现多张图片上传并预览功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下directive.js    angu...
    99+
    2022-10-19
  • PHP实现多张图片上传功能的示例代码
    首先要知道这个函数 move_uploaded_file(); 接下来是我们的input框,和我们的html页面 这里我们是增加的input框我们也可以写写一个属性  &...
    99+
    2022-11-13
  • uni-app使用uploadFile上传多张图片的具体实现
    目录前言:一、需求概述二、相关文档三、具体实现方法总结前言: 最近的工作中出现了一个功能点,具体写法我在前面的文章中已经阐述过,不过之前的情况是上传图片调用后端的一个接口,整个表单页...
    99+
    2023-05-18
    uni-app 上传文件 uploadfile上传多张图片 uni-app uploadfile
  • element-ui如何实现上传一张图片后隐藏上传按钮功能
    这篇文章给大家分享的是有关element-ui如何实现上传一张图片后隐藏上传按钮功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。element-ui上传一张图片后隐藏上传按钮 ...
    99+
    2022-10-19
  • HTML5中怎么实现多图上传功能
    HTML5中怎么实现多图上传功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。HTML结构:<div class=&quo...
    99+
    2022-10-19
  • html5中怎么实现图片上传预览功能
    今天就跟大家聊聊有关html5中怎么实现图片上传预览功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。<!DOCTYPE html&...
    99+
    2022-10-19
  • PHP怎么实现上传图片功能
    本篇内容主要讲解“PHP怎么实现上传图片功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么实现上传图片功能”吧!首先我们在form表单加上上传附件#file,上传按钮#imgbut,记...
    99+
    2023-06-04
  • Html5 中怎么利用FileReader实现即时上传图片功能
    Html5 中怎么利用FileReader实现即时上传图片功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。<!DOCT...
    99+
    2022-10-19
  • 怎么使用CSS mask-composite实现单张图片任意颜色转换
    这篇文章主要介绍了怎么使用CSS mask-composite实现单张图片任意颜色转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用CSS mask-composite...
    99+
    2022-10-19
  • HTML5中怎么实现一个图片压缩上传功能
    这篇文章给大家介绍HTML5中怎么实现一个图片压缩上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、创建一个图片和一个canvasXML/HTML Code复制内容到剪贴板va...
    99+
    2022-10-19
  • Html5怎么实现上传本地图片并预览功能
    小编给大家分享一下Html5怎么实现上传本地图片并预览功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近工作中需要H5上传显...
    99+
    2022-10-19
  • 怎么使用HTML5与CSS3实现无插件拖拽上传图片功能
    这篇文章主要介绍“怎么使用HTML5与CSS3实现无插件拖拽上传图片功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用HTML5与CSS3实现无插件拖拽上传图片功能”文章能帮助大家解决问题。...
    99+
    2023-07-04
  • java使用CKEditor实现图片上传功能
    java如何使用CKEditor实现图片上传功能,具体内容如下根据实际需要下载指定的CKEditor删除文件ckeditor/plugins/image/dialogs/image.js预览框中文本内容,并修改hidden属性值为显示上传选...
    99+
    2023-05-31
    ckeditor 上传 ava
  • 怎么用js点击按钮实现多张图片循环切换
    本篇内容介绍了“怎么用js点击按钮实现多张图片循环切换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体内容如下代码:<!DOCTYP...
    99+
    2023-06-28
  • thinkphp5怎么加layui实现图片上传功能
    本篇内容介绍了“thinkphp5怎么加layui实现图片上传功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!网站中很多表单都会用到上传图...
    99+
    2023-07-05
  • 怎么在HTML5中实现一个图片上传预处理功能
    这篇文章将为大家详细讲解有关怎么在HTML5中实现一个图片上传预处理功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片通过 File API 获取图片。var input&...
    99+
    2023-06-09
  • Vue怎么使用Element-ui表单发送数据与多张图片到后端
    今天小编给大家分享一下Vue怎么使用Element-ui表单发送数据与多张图片到后端的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作