摘要:通过给标签绑定事件,获取上传的文件,异步上传。而通过的属性获取的上传文件被格式化为二进制形式。解决方案跨域异步提交工具使用非提交上传文件大小超过限制此外,还可以借助插件实现异步上传文件
背景
UI如图所示,其中有一个拍照图标,点击后要选择拍照或者从相册中选择要上传的图片。
拍照上传部分的代码如下
</>复制代码
html部分
</>复制代码
</>复制代码
css部分
</>复制代码
.take-phote-picture{
margin: 10px 20px;
width: 100px;
}
.select-picture{
opacity: 0;
position: absolute;
width: 100px;
height: 100px;
top: 10px;
left: 70px;
border-radius: 50px;
}
</>复制代码
设计思路
</>复制代码
将一个input[type="file"]的透明度设置为0,悬浮在img标签之上。通过给input标签绑定change事件,获取上传的文件,异步上传。
问题
通过ajax的data属性提交到后台的数据必须是键值对(key-value)的形式,其中值value不能为二进制数据。而通过input的files属性获取的上传文件被格式化为二进制形式。
解决方案</>复制代码
define([], function () {
/**
* 跨域异步post提交工具 使用Formdata,非iframe 提交
*/
var ifajax = function(_url){
var data = new FormData();
var obj ={};
obj.appendInput = function (input_obj) {
if (input_obj.files) {
for (var i = 0; i < input_obj.files.length; i++) {
data.append(input_obj.name, input_obj.files[i]);
}
} else {
data.append(input_obj.name, input_obj.value);
}
return this;
};
obj.submit = function (success,err) {
var xhr = new XMLHttpRequest();
var url = _url||"/club/apiv1/me/b64-upload";
xhr.open("POST", url, true);
xhr.setRequestHeader("Accept", "*/*");
xhr.onload = function () {
if (xhr.status == 200) {
if (xhr.responseText) {
try {
//console.log(xhr);
var json = $.parseJSON($.trim(xhr.responseText));
success && success(json);
} catch (e) {
err && err("parse error", xhr.responseText);
}
}
} else {
var message = xhr.responseText, code = xhr.status;
if (code === 413) {
message = "上传文件大小超过限制"
} else {
try {
var json = $.parseJSON(xhr.responseText);
message = json.message;
code = json.code;
} catch (e) {
}
}
err && err (code, message);
}
};
xhr.send(data);
return;
}
return obj;
};
return ifajax;
});
</>复制代码
此外,还可以借助插件ajaxFileUpload实现异步上传文件
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82525.html
摘要:图片上传是前端开发中经常使用到的,上传方案也有很多种吧,可能你有在使用一些插件完成上传,比如我以前自己写的一个后台系统现在在这里总结下图片上传的解决方案。构造函数返回一个新构造的。事件及方法我们主要是用事件及方法,其他见处理事件。 showImg(https://segmentfault.com/img/bVbmLXM?w=500&h=500); 图片上传是前端开发中经常使用到的,上传...
摘要:图片上传是前端开发中经常使用到的,上传方案也有很多种吧,可能你有在使用一些插件完成上传,比如我以前自己写的一个后台系统现在在这里总结下图片上传的解决方案。构造函数返回一个新构造的。事件及方法我们主要是用事件及方法,其他见处理事件。 showImg(https://segmentfault.com/img/bVbmLXM?w=500&h=500); 图片上传是前端开发中经常使用到的,上传...
阅读 1154·2021-11-25 09:43
阅读 1675·2021-09-13 10:25
阅读 2636·2021-09-09 11:38
阅读 3445·2021-09-07 10:14
阅读 1744·2019-08-30 15:52
阅读 673·2019-08-30 15:44
阅读 3609·2019-08-29 13:23
阅读 2001·2019-08-26 13:33