所有分类
  • 所有分类
  • 后端开发
轻松上传多图!H5神器插件大揭秘

轻松上传多图!H5神器插件大揭秘

这篇文章主要为大家详细介绍了h5图片上传插件,基于zepto,支持多文件上传,进度和图片预览,具有一定的参考价值,感兴趣的小伙伴们可以参考一下基于zepto,支持多文件上传,进度和图片预览,用于手机端。手机端可以自动的调出相机和相册。

1.插件简介

今天给大家聊聊一个基于JS库zepto开发的、超好用的H5图片上传神器!它能让你轻轻松松一下子上传很多图片,而且还能看到上传的进度~另外,这个插件还有图片预览功能!在我们的手机上,用起来特别方便,让你随心所欲上传各种图片,非常值得推荐!其实我这个灵感就是来源于对经常要用手机传图的生活场景的观察,感觉确实是超级实用哒,希望也能给你们带来一些启发哟~

2.文件上传原理

说到H5的图片上传小程序,首先咱们得懂啥是传文件呗?不就是用那个叫”file”的东西!不管是电脑页还是手机APP,都是这样干的。网站开发的小伙伴们把这个file藏起来,然后让用户点了它来选文件上传。在H5里,我们就用FormData,把文件信息装到请求里去,接着用XMLHttpRequest,发起上传请求。

(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('');
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);

说到手机上传文件预览,我们用FileReader把本地档案读出来然后直接展示给大家看咯。这样,你就可以在上传前瞅一眼选的图对不对~

3.插件实现细节

针对H5图片上传插件的具体实现细节,需要考虑以下几个方面:

-让file隐形:要防止出现冲突问题,就把file弄得看不见,但别忘了它的爸爸还是在那儿,隔壁子还要有个相对定位置置的搞头儿,这样点击才能生效哈。

-拿下文件数据:关注下file元素的变化情况,趁机抓取用户选的文件放到FormData对象里,给上传做个预处理。

-进度条显示:用XMLHttpRequest搞定,让你看着文件上传的进度。

 [HttpPost]
 public ActionResult MUploadImg(HttpPostedFileBase mfile)
 {
  return UploadImg(mfile, "Mobile");
 }

-看图秀:用FileReader读取你传过来的照片,马上就在这儿看到预览~

4.参数配置与回调函数

用H5图片上传小工具时得留心几个地方:参数设定和回调函数的设置。

-这个fileBase设置很重要,它就是你给后台呼叫文件,然后把数据传过去要用的那几个字符哈。所以,记住,用哪个名字就得和插件里那个啥名字要一模一样,不然数据可传不过去喔!

 [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);
 }

-回调函数:想怎么设就怎么设,无论是文件上传成功还是失败都能触发相应动作!

5.手机端适配与扩展功能

因为这H5图片上传的小工具主要是用在咱手里的手机上的,所以得牢记下手机的特殊性跟大家用着舒不舒服:

-相机和相册直接搞定:这个小插件能帮你快速启动手机的相机或者相册,随心所欲地拍或选图片上传就行了!

-预览大小定好啦:选定图片后就能直接在上面浏览效果,别提多方便了!

-进度条设计哈:你来负责搞进度条样子,再根据反馈的数字图出来!

UploadImg

点击选择文件

$.fileUpload({ filebutton: "#dd", previewZoom: "#preview" });

6.多张图片同时传输

这个H5图片上传小助手不只能传一张图,你也可以同时发几张!想发哪几张就选哪个呗,然后眼睁睁看着它们一个个地传进去即可。这个一锅端的功能是不是很方便?既节省时间又提升用户使用感~

7.使用方法与注意事项

在调用H5图片上传插件时,需要注意以下几点:

-怎么用?可以直接嵌入到zepto里面,也可以用来替代$.fn!

-绑定简单:用zepto,咱们能通过id或样式直接绑定事件~

-看看效果,控制进度:开发人员要按公司需要来设计好看的预览图和进度条。

8.总结与展望

总的说来,基于zepto的这个H5图片上传工具真是给手机前端开发带来了很大方便,提高了不少工作效率。看了这篇文章的详细解析后,大家应该会对它更加熟悉。还有,等科技越来越发达,这东西肯定还能变得更好用!

轻松上传多图!H5神器插件大揭秘

原文链接:https://www.icz.com/technicalinformation/web/2024/04/14414.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?