`
dawuafang
  • 浏览: 1192259 次
文章分类
社区版块
存档分类
最新评论

H5图片上传插件

 
阅读更多

转载自:http://www.cnblogs.com/stoneniqiu/p/5917272.html

基于zepto,支持多文件上传,进度和图片预览,用于手机端。

复制代码
(function ($) {
    $.extend($, {
        fileUpload: function (options) {
            var para = {
                multiple: true,
                filebutton: ".filePicker",
                uploadButton: null,
                url: "/home/MUploadImg",
                filebase: "mfile",//mvc后台需要对应的名称
                auto: true,
                previewZoom: null,
                uploadComplete: function (res) {
                    console.log("uploadComplete", res);
                },
                uploadError: function (err) {
                    console.log("uploadError", err);
                },
                onProgress: function (percent) {  // 提供给外部获取单个文件的上传进度,供外部实现上传进度效果
                    console.log(percent);
                },
            };
            para = $.extend(para, options);

            var $self = $(para.filebutton);
            //先加入一个file元素
            var multiple = "";  // 设置多选的参数
            para.multiple ? multiple = "multiple" : multiple = "";
            $self.parent().append('<input id="fileImage"  style="display:none"  type="file" size="30" name="fileselect[]" ' + multiple + '>');

            var doms = {
                "fileToUpload": $self.parent().find("#fileImage"),
                // "thumb": $self.find(".thumb"),
                // "progress": $self.find(".upload-progress")
            };
            var core = {
                fileSelected: function () {
                    var files = (doms.fileToUpload)[0].files;
                    var count = files.length;
                    console.log("共有" + count + "个文件");
                    for (var i = 0; i < count; i++) {
                        var item = files[i];
                        console.log(item.size);
                        if (para.auto) {
                            core.uploadFile(item);
                        }
                        core.previewImage(item);
                    }
                },

                uploadFile: function (file) {
                    console.log("开始上传");
                    var formdata = new FormData();

                    formdata.append(para.filebase, file);//这个名字要和mvc后台配合

                    var xhr = new XMLHttpRequest();
                    xhr.upload.addEventListener("progress", function (e) {

                        var percentComplete = Math.round(e.loaded * 100 / e.total);
                        para.onProgress(percentComplete.toString() + '%');
                    });
                    xhr.addEventListener("load", function (e) {
                        para.uploadComplete(xhr.responseText);
                    });
                    xhr.addEventListener("error", function (e) {
                        para.uploadError(e);
                    });

                    xhr.open("post", para.url, true);
                    //xhr.setRequestHeader("X_FILENAME", file.name);
                    xhr.send(formdata);
                },
                uploadFiles: function () {
                    var files = (doms.fileToUpload)[0].files;
                    for (var i = 0; i < files.length; i++) {
                        core.uploadFile(files[i]);
                    }
                },
                previewImage: function (file) {
                    if (!para.previewZoom) return;
                    var img = document.createElement("img");
                    img.file = file;
                    $(para.previewZoom).append(img);
                    // 使用FileReader方法显示图片内容
                    var reader = new FileReader();
                    reader.onload = (function (aImg) {
                        return function (e) {
                            aImg.src = e.target.result;
                        };
                    })(img);
                    reader.readAsDataURL(file);
                }
            }
            doms.fileToUpload.on("change", function () {
                //doms.progress.find("span").width("0");
                console.log("选中了文件");
                core.fileSelected();
            });

            console.log("初始化!");
            //绑定事件

            $(document).on("click", para.filebutton, function () {
                console.log("clicked");
                doms.fileToUpload.click();
            });
            if (para.uploadButton) {
                $(document).on("click", para.uploadButton, function () {
                    core.uploadFiles();
                });
            }
        }
    });
})(Zepto);
复制代码

简单讲解:上传还是得靠file元素,所以一开始就加了个隐藏的。然后通过file的change事件获得需要上传的文件并放入formdata中,再使用xmlHttpRequest发请求。进度条是直接绑定的process事件。文件预览是filereader,另外需要注意的就是filebase参数,对应的是MVC后台上传方法的参数的名称,如果不一致,后台将获取不到file。回调函数就不说了。

      [HttpPost]
        public ActionResult MUploadImg(HttpPostedFileBase mfile)
        {
            return UploadImg(mfile, "Mobile");
        }
复制代码
  [HttpPost]
        public ActionResult UploadImg(HttpPostedFileBase file, string dir = "UserImg")
        {
            if (CheckImg(file, imgtypes) != "ok") return Json(new { Success = false, Message = "文件格式不对!" }, JsonRequestBehavior.AllowGet);

            if (file != null)
            {
                var path = "~/Content/UploadFiles/" + dir + "/";
                var uploadpath = Server.MapPath(path);
                if (!Directory.Exists(uploadpath))
                {
                    Directory.CreateDirectory(uploadpath);
                }
                string fileName = Path.GetFileName(file.FileName);// 原始文件名称
                string fileExtension = Path.GetExtension(fileName); // 文件扩展名
                //string saveName = Guid.NewGuid() + fileExtension; // 保存文件名称 这是个好方法。
                string saveName = Encrypt.GenerateOrderNumber() + fileExtension; // 保存文件名称 这是个好方法。
                file.SaveAs(uploadpath + saveName);

                return Json(new { Success = true, SaveName = path + saveName });
            }
            return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet);

        }
复制代码

调用:

复制代码
    <div class="page" id="upload">
        <h2>UploadImg</h2>
        <div id="dd" class="filePicker">点击选择文件</div>
        <div id="preview"></div>

    </div>
    <script>
        $.fileUpload({ filebutton: "#dd", previewZoom: "#preview" });
    </script>
复制代码

扩展到$对象而不扩展到$.fn,是因为zepto中绑定事件的时候后者不方便,传递id或样式名容易绑定。手机端可以自动的调出相机和相册。默认是不预览的图片的,需要制定预览区域,进度条需要自己写样式,只返回了进度值。

同时传2张的效果:

参考了两篇博客:

http://www.cnblogs.com/hutuzhu/p/5254532.html

http://www.lanrenzhijia.com/js/css3/2864.html

你的关注和支持是我写作的最大动力~
书山有路群:452450927
出处:http://www.cnblogs.com/stoneniqiu/
github:https://github.com/stoneniqiu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面


分享到:
评论

相关推荐

    h5图片上传插件

    在IT行业中,H5图片上传插件是一种广泛应用于网页端的组件,它使得用户能够在浏览器上方便快捷地上传图片。这种插件对于个人资料编辑、社交媒体互动、在线表单提交等场景尤其重要,因为它简化了图片处理流程,提高了...

    h5图片上传插件带java实现方式

    "h5图片上传插件带java实现方式"的描述表明我们要探讨的是一种结合HTML5和Java技术实现的图片上传解决方案。下面将详细阐述这个主题涉及的关键知识点。 1. **HTML5 File API**: HTML5引入了File API,使得在...

    好用的h5上传插件,可以通过此插件上传资源

    本文将详细介绍一个名为“Huploadify”的H5上传插件,以及如何利用它来上传资源。 Huploadify是一个专门针对H5环境设计的上传插件,它提供了丰富的自定义选项和良好的用户体验。这个插件适用于那些需要用户上传文件...

    PHPCMS V9 修改flash上传为H5上传方案 attachments.php

    PHPCMS V9 修改flash上传为H5上传方案 phpcms 上传功能文件

    phpcms上传插件H5版.rar

    《phpcms上传插件H5版详解》 随着技术的发展,传统的基于Flash的上传插件在现代浏览器中逐渐面临淘汰,特别是在Chrome等主流浏览器中,由于安全性和性能方面的考虑,Flash已被逐步禁用。phpcms作为一款广泛使用的...

    jQuery H5移动端图片预览插件

    在这个背景下,"jQuery H5移动端图片预览插件"应运而生,它旨在解决移动端图片预览的问题,为用户提供流畅、高效且自适应的图片浏览体验。 这款插件主要针对手机和平板等移动设备设计,它能够无缝地集成到你的H5...

    PHPCMS 修改flash附件上传 改为H5上传

    PHPCMS是一款流行的开源内容管理系统,它为网站开发者提供了丰富的功能,包括文章发布、图片管理、文件上传等。然而,随着技术的发展,Adobe Flash逐渐被淘汰,尤其是谷歌浏览器已经不再支持Flash,这使得基于Flash...

    移动端H5图片压缩上传插件

    移动h5开发避免不了上传图片,一般我们使用html自带的控件input或者使用微信上传API。但微信上传API不是任何地方都可以使用的,使用html自带的控件input上传又免不了图片体积太大,上传不稳定。localResizeIMG4就是...

    仿微信查看图片、H5的图片轮播插件PhotoSwipe、SuperSlide

    总的来说,无论是PhotoSwipe还是SuperSlide,它们都是H5图片展示领域的有力工具。开发者可以根据项目需求,选择合适的插件,利用这些强大的库来提升用户的交互体验,打造高质量的H5页面。在实际开发过程中,理解每个...

    h5 web端上传插件demo样例

    在本文中,我们将深入探讨基于H5的Web端上传插件及其在EasyUI框架中的应用。首先,让我们理解H5(HTML5)的核心概念。HTML5是超文本标记语言的最新版本,它提供了许多增强功能,如离线存储、媒体元素、拖放功能以及...

    (最新版本)HTML5批量图片上传插件支持多个图片上传功能

    HTML5是一种先进的网页标记语言,它在传统的...综上所述,HTML5批量图片上传插件是通过利用HTML5的新特性,结合JavaScript和后端技术来实现的。它提升了用户体验,简化了开发者的工作,是现代网页开发中的重要一环。

    H5实现多图片预览上传,可点击可拖拽

    通过以上步骤,我们可以创建一个功能完备且具有良好用户体验的H5图片上传控件。需要注意的是,尽管前端实现了大部分功能,但后台服务器也需要支持接收并处理这些文件,通常涉及文件存储、权限控制、安全验证等方面。...

    phpcms上传图片插件.rar

    phpcms原系统图片上传插件不能使用,phpcms上传按钮不能点击。由于谷歌浏览器宣布不再支持flash上传的方式,而phpcms默认的正是flash上传,我们只能改为H5上传,此版本使用webuploader.js,感觉这个挺强大,自动识别...

    uploadify H5版(uploadifive)基于html5的手机上传图片插件

    Uploadify是一个JavaScript上传组件,而其H5版本uploadifive则是针对现代浏览器,特别是移动设备优化的,利用HTML5的技术特性实现图片上传功能。 HTML5是超文本标记语言的第五代标准,它引入了多项新特性,如本地...

    jQuery图片上传插件支持多图批量上传与多文件批量上传控件

    本文将详细讲解“jQuery图片上传插件”,它支持多图批量上传和多文件批量上传功能,适用于各种网页应用。 首先,jQuery是一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作和Ajax交互等...

    kindeditor--自定义添加网络视频插件,修改批量图片上传方式flash为h5

    这个压缩包文件的内容显然是关于如何在KindEditor中自定义添加网络视频插件以及将原有的Flash批量图片上传方式替换为H5(HTML5)上传方式。下面我们将深入探讨这两个主题。 首先,让我们了解网络视频插件的自定义...

    phpcms上传图片修改为H5上传-解决谷歌等浏览器无法上传问题.zip

    webuploader图片上传插件是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在新出的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流的IE浏览器,沿用原来的FLASH运行时,...

    H5 文件上传js插件 easyUploader.js Bug修复版

    在H5应用中,文件上传是一项常见的功能,尤其在网页端的交互设计中,用户可能需要上传图片、文档等各类文件。`easyUploader.js`是一个轻量级的JavaScript插件,专为H5文件上传而设计,提供了一套简单易用的API接口,...

    phpcms修改为H5上传.rar

    3. 无需插件:与Flash不同,H5上传无需安装额外插件,减少了用户操作步骤。 4. 拖放功能:H5支持拖放上传,提高了用户交互性。 二、PHP CMS的上传机制 理解PHP CMS原有的上传机制是实现H5上传的基础。PHPCMS的上传...

    解决phpcms v9在谷歌等浏览器中无法上传图片的问题,修改为H5上传

    在phpcms V9中,图片上传通常依赖于Flash插件,这是因为在早期的Web开发中,Flash是实现文件上传的主要技术。然而,随着HTML5的发展,新的File API使得在浏览器端处理文件变得更为便捷,而且无需依赖外部插件,如...

Global site tag (gtag.js) - Google Analytics