600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > input[type=file] 异步上传文件

input[type=file] 异步上传文件

时间:2019-09-08 01:54:00

相关推荐

input[type=file] 异步上传文件

背景

UI如图所示,其中有一个拍照图标,点击后要选择拍照或者从相册中选择要上传的图片。

拍照上传部分的代码如下

html部分

<div class="take-photo"><img src="./images/take-photo.png" class="take-phote-picture"><input type="file" name="file" accept="images/*" class="select-picture"></div>

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事件,获取上传的文件,异步上传。

问题

通过ajaxdata属性提交到后台的数据必须是键值对(key-value)的形式,其中值value不能为二进制数据。而通过inputfiles属性获取的上传文件被格式化为二进制形式。

解决方案

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实现异步上传文件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。