原生JS实现前端本地文件上传

 更新时间:2018年09月08日 14:55:28   作者:想要飞的pig  
这篇文章主要为大家详细介绍了原生JS实现前端本地文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了JS实现前端本地文件上传的具体代码,供大家参考,具体内容如下

通过input type = file来选择本地文件

<div>
  <form>
    <input type="file" id="file-input" name="fileContent">
  </form>
</div>
var fileInput = document.querySelector('#file-input');
fileInput.onchange = function(){
  console.log('文件名:',this.value)
  var formData = new FormData(this.form);
  console.log(formData)
}
//打印出的结果是文件名: C:\fakepath\css.jpg然后在是一个空对象

使用formData无法得到文件的内容,那么就使用FileReader来读取整个文件的内容

var fileInput = document.querySelector('#file-input');
fileInput.onchange = function(){
 var filereader = new FileReader();
 var fileType = this.files[0].type;
 filereader.onload = function(){
   if(/^image\[jpeg|png|gif]/.test(fileType)){
     console.log(this.result);
   }
 }
 console.log(this.files[0]);
 filereader.readAsDataURL(this.files[0]);
}
console.dir(fileInput);

从打印结果来看,能清楚的知道上传的文件信息是在input type = ‘file'dom对象中的files[0]中。
filereader.readAsDataURL是将flies[0]里的信息转换成base64方式读取。
filereader的读取为以下格式:

  • readAsDataURL(this.files[0]) base64位读取
  • readAsBinaryString(this.files[0]) 以二进制方式读取读取结果是UTF-8形式(被废弃)
  • readAsArrayBuffer(this.flies[0]) 以二进制原始方法读取,读取结果可转换成整数的数组
var files = document.getElementById('pic').files; 
//files是文件选择框选择的文件对象数组

if(files.length == 0) return; 

var form = new FormData(), 
  url = 'http://.......', //服务器上传地址
  file = files[0];
form.append('file', file);

var xhr = new XMLHttpRequest();
xhr.open("post", url, true);

//上传进度事件
xhr.upload.addEventListener("progress", function(result) {
  if (result.lengthComputable) {
    //上传进度
    var percent = (result.loaded / result.total * 100).toFixed(2); 
  }
}, false);

xhr.addEventListener("readystatechange", function() {
  var result = xhr;
  if (result.status != 200) { //error
    console.log('上传失败', result.status, result.statusText, result.response);
  } 
  else if (result.readyState == 4) { //finished
    console.log('上传成功', result);
  }
});
xhr.send(form); //开始上传

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JS实现可拖曳、可关闭的弹窗效果

    JS实现可拖曳、可关闭的弹窗效果

    这篇文章主要介绍了JS实现可拖曳、可关闭的弹窗效果,可实现点击文字弹出可拖动的窗口,同时背景出现变暗的遮罩效果,点击遮罩层即可关闭弹出,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 实例详解display:none与visible:hidden的区别

    实例详解display:none与visible:hidden的区别

    这篇文章主要介绍了实例详解display:none与visible:hidden的区别的相关资料,需要的朋友可以参考下
    2017-03-03
  • JS之Date对象和获取系统当前时间详解

    JS之Date对象和获取系统当前时间详解

    本篇文章主要是对JS之Date对象和获取系统当前时间进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JavaScript 读取图片实例代码

    JavaScript 读取图片实例代码

    本章主要介绍通过JavaScript读取图片的例子,本例子不包含服务器端后台代码,只包含前台页面代码,所以直接用Html文件就可以,代码如下,因为包含详细的注意,所以不再详细说明了,如果有看不明白的,可以给我留言,我给大家具体答复。
    2009-11-11
  • 小程序scroll-view组件实现滚动的示例代码

    小程序scroll-view组件实现滚动的示例代码

    这篇文章主要介绍了小程序scroll-view组件实现滚动的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • js当一个变量为函数时 应该注意的一点细节小结

    js当一个变量为函数时 应该注意的一点细节小结

    变量testFun为一个匿名函数,匿名函数返回的一个testFun.init对象(也是一个匿名函数)
    2011-12-12
  • JavaScript的parseInt 进制问题

    JavaScript的parseInt 进制问题

    今天在整理以前写过的一段根据周期值自动计算下次执行日期的js代码,发现一bug,我使用parseInt对源数据串进行转换,当输入类似:2009-05-05时,parseInt将把串的05做8进制转换,这样结果自然就不对了。
    2009-05-05
  • 微信小程序实现跳转详情页面

    微信小程序实现跳转详情页面

    这篇文章主要为大家详细介绍了微信小程序实现跳转详情页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法

    通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法

    这篇文章主要介绍了通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • javascript 判断字符串是否包含某字符串及indexOf使用示例

    javascript 判断字符串是否包含某字符串及indexOf使用示例

    js javascript 判断字符串是否包含某字符串,String对象中查找子字符及indexOf具体使用,感兴趣的朋友可以参考下
    2013-10-10

最新评论