热门关键字:
jquery > jquery教程 > html5 > VUE项目中文件上传兼容IE9

VUE项目中文件上传兼容IE9

452
作者:管理员
发布时间:2020/3/16 10:25:42
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1044

  项目使用VUE编写,UI是ElementUI,但是Element的Upload组件是不兼容IE9的。因为IE9中无法使用FormData。

  查找资料基本有两种解决方法:1.引入JQuery和jQuery.form。2.使用vue-upload-component

  1、jQuery.form

  插件提供ajaxSubmit和ajaxForm两种表单提交方式,注意:不要对同一个表单同时使用两种方式。

  ajaxSubmit是jQuery表单插件核心函数。非常灵活,因为它依赖于事件机制,只要有事件触发就能使用ajaxSubmit()提交表单,eg:超链接、图片、按钮的click事件。

  ajaxForm是对$(“any”).ajaxSubmit(options)函数的一个封装,适用于表单提交的方式(注意,主体对象是<form>),会帮你管理表单的submit和提交元素([type=submit],[type=image])的click事件。在出发表单的submit事件时:阻止submit()事件的默认行为(同步提交的行为)并且调用$(this).ajaxSubmit(options)函数。

  $('#myForm').ajaxForm(function(){

  $('#output1').html("提交成功!");

  });

  $('#myForm2').submit(function(){

  $(this).ajaxSubmit(function(){

  $('#output2').html("提交成功!");

  });

  returnfalse;//阻止表单默认提交

  });

  varoptions={

  target:'#output',//把服务器返回的内容放入id为output的元素中

  beforeSubmit:validate,//提交前的回调函数

  success:showResponse,//提交后的回调函数

  //url:url,//默认是form的action,如果申明,则会覆盖

  //type:type,//默认是form的method(getorpost),如果申明,则会覆盖

  //dataType:null,//html(默认),xml,script,json...接受服务端返回的类型

  //clearForm:true,//成功提�aType=xml

  varname=$('name',responseXML).text();

  varaddress=$('address',responseXML).text();

  $("#xmlout").html(name+""+address);

  //dataType=json

  $("#jsonout").html(data.name+""+data.address);

  };

  2、vue-upload-component

  安装:

  npminstallvue-upload-component--save

  使用:

  设置this.$refs.upload.active=true,触发上传。

  @input-filter是上传前的钩子函数,用于判断是否符合要求

  @input-file是上传回调函数,每次上传的状态变化时都会调用@input-file绑定的回调,形参是newFile,oldFile,通过新旧文件的对比来得到当前的状态

  data:附加请求的参数

  extensions:允许上传文件的后缀("jpg,gif,png,webp")

  headers:自定义请求headers

  <template>

  <ul>

  <liv-for="fileinfiles">

  <span>{{file.name}}</span>

  <buttontype="button"@click.prevent="remove(file)">移除</button>

  </li>

  </ul>

  <file-upload

  ref="upload"

  v-model="files"

  post-action="/"

  @input-file="inputFile"

  @input-filter="inputFilter"

  >Uploadfile</file-upload></template>

  <script>

  import'vue-upload-component/dist/vue-upload-component.part.css'

  importFileUploadfrom'vue-upload-component'

  exportdefault{

  components:{

  FileUpload,

  },

  data(){

  return{

  files:[]

  }

  },methods:{

  remove(file){

  this.$refs.upload.remove(file)//会触发inputFile中删除条件

  }

  /**

  *Haschanged

  *@paramObject|undefinednewFile只读

  *@paramObject|undefinedoldFile只读

  *@returnundefined

  */

  inputFile:function(newFile,oldFile){

  if(newFile&&!oldFile){

  //添加文件

  }

  if(newFile&&oldFile){

  //更新文件

  //开始上传

  if(newFile.active!==oldFile.active){

  console.log('Startupload',newFile.active,newFile)

  //限定最小字节

  if(newFile.size>=0&&newFile.size<100*1024){

  newFile=this.$refs.upload.update(newFile,{error:'size'})

  }

  }

  //上传进度

  if(newFile.progress!==oldFile.progress){

  console.log('progress',newFile.progress,newFile)

  }

  //上传错误

  if(newFile.error!==oldFile.error){

  console.log('error',newFile.error,newFile)

  }

  //上传成功

  if(newFile.success!==oldFile.success){

  console.log('success',newFile.success,newFile)

  }

  }

  if(!newFile&&oldFile){

  //删除文件

  //自动删除服务器上的文件

  if(oldFile.success&&oldFile.response.id){

  //$.ajax({

  //type:'DELETE',

  //url:'/file/delete?id='+oldFile.response.id,

  //});

  }

  }

  //自动上传

  if(Boolean(newFile)!==Boolean(oldFile)||oldFile.error!==newFile.error){

  if(!this.$refs.uploader.active){

  this.$refs.uploader.active=true

  }

  }

  },

  /**

  *Pretreatment

  *@paramObject|undefinednewFile读写

  *@paramObject|undefinedoldFile只读

  *@paramFunctionprevent阻止回调

  *@returnundefined

  */

  inputFilter:function(newFile,oldFile,prevent){

  if(newFile&&!oldFile){

  //过滤不是图片后缀的文件

  if(!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.name)){

  returnprevent()

  }

  }

  //创建blob字段用于图片预览

  newFile.blob=''

  letURL=window.URL||window.webkitURL

  if(URL&&URL.createObjectURL){

  newFile.blob=URL.createObjectURL(newFile.file)

  }

  }}

  }

  </script>

  注意:文件上传之后的返回值Content-Type值不能是application/json这会导致IE去解析返回结果,最终调用文件的保存或者打开,此处需要与后端协商将Content-Type改为text/plain





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐