首页前端开发HTMLH5手机端图片上传插件代码

H5手机端图片上传插件代码

时间2024-01-23 12:13:37发布访客分类HTML浏览809
导读:收集整理的这篇文章主要介绍了H5手机端图片上传插件代码,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要为大家详细介绍了H5图片上传插件,基于zepto,支持多文件上传,进度和图片预览,具有一定的参考价值,感兴趣的小伙伴们可以参...
收集整理的这篇文章主要介绍了H5手机端图片上传插件代码,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要为大家详细介绍了H5图片上传插件,基于zepto,支持多文件上传,进度和图片预览,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

(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.css('posITion', 'relative');
      $self.append('input id="fileimage" style="opacity:0;
    position:absolute;
    top: 0;
    left: 0;
    width:100%;
    height:100%" 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事件。所以用了透明度,将父类设置为相对位置。然后通过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);
 }
    

调用:

p class="page" id="upload">
     h2>
    UploadImg/h2>
     p id="dd" class="filePicker">
    点击选择文件/p>
     p id="preview">
    /p>
    /p>
    script>
 $.fileUpload({
 filebutton: "#dd", previewZoom: "#preview" }
    );
    /script>
    

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

同时传2张的效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

H5实现上传本地图片并能够预览的功能代码

以上就是H5手机端图片上传插件代码的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 如何实现HTML5页面音视频在微信和...下一篇:H5横竖屏检测的方法猜你在找的html5相关文章 关于移动端h5开发相关内容总结2022-05-17html5教程-学表单的第二天2018-12-10html5教程-HTML5浏览器支持2018-12-10html5教程-HTML5智能表单2018-12-10html5教程-微信H5使用resLoader实现加载页效果2018-12-10html5教程-day01-初级-JS0-热身运动JS入门教程2018-12-10html5教程-html5shiv.js和respond.min.js2018-12-10html5教程-不同浏览器对于html5 audio标签和音频格式的兼容性2018-12-10html5教程-使用Html5实现手风琴案例2018-12-10html5教程-html5笔记2018-12-10 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: H5手机端图片上传插件代码
本文地址: https://pptw.com/jishu/584181.html
如何让HTML5实现移动端复制功能 H5实现上传本地图片并能够预览的功能代码

游客 回复需填写必要信息