自己还是一个菜鸟的时候,有次项目经理让我用Java做一个多文件上传的功能。那时候技术学得很渣,最多只能够实现单文件上传。做了一个星期都没有做出来,于是项目经理不留半点情面,当着办公室所有人的面痛批我一顿,让我颜面扫地,当时我对了他一句我大不了辞职嘛。那是我的悲伤记忆,最终和上级领导沟通半天后,确定留下来继续干。经历一些事情后,一个人总是要成长的,我也一样。如果那个简单的功能都做不出来,那我还能够干什么呢?除了提升自己我还能干什么呢?
那次的问题最后是使用SWFUpload插件解决多文件上传问题的,多年之后的今天已经对文件上传信手拈来,不管是使用插件还是原生的input标签。现在来分享一下使用原生input标签上传文件的用法。
AJAX实现单文件上传
<input type="file" name="file" id="uploadFile" οnchange="uploadExcel()" accept=".xls,.xlsx">
input标签可以隐藏也可以显示出来,样式怎么好看自己就怎么改,type,name属性不要忘记。主要是触发input标签的单击事件,然后选择文件。accept属性的作用是可以限制文件的选择类型,不在accept里面的类型的文件不会显示出来。对一般人来说还是能起作用。选择好文件后,触发下一个事件onchange,它是在文件选择好以后执行。重点来了,文件选择好以后需要做的事情,上代码:
let fileType = $('#uploadFile').val();
fileType = fileType.substring(fileType.lastIndexOf('.'));
//文件类型校验
if(fileType !== '.xls' && fileType !== '.xlsx'){
return msgError('操作提示:只能上传xls格式或者xlsx格式的文件!');
}
//获取单个文件
let file = document.getElementById(`uploadFile`).files[0];
//必须创建一个FormData对象,然后将获取到的文件数据添加到对象中,并且要注意inputFile,解析时需要它。
let formData = new FormData();
formData.append('inputFile',file);
$.ajax({
url: '{
{projcfg.appurl}}/api/cable/cable_manage_route/uploadExcel',
type: 'post',
data: formData,
cache: false,//上传文件无需缓存
contentType: false,//必须
processData: false,//用于对data参数进行序列化处理 这里必须false
success: function (json) {
if (json.success) {
msgSuccess(`消息提示:${json.msg}`);
$("#dataTable"