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

这篇文章主要为大家详细介绍了H5图片上传插件,基于zepto,支持多文件上传,进度和图片预览,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

基于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.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);

简单讲解:上传还是得靠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);

}

调用:

UploadImg

点击选择文件

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

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

同时传2张的效果:

6c67d6762f63ba6a27d3afa3b1f15d35.png

f437ccf94b80994399fae0edc17d7047.png

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

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值