原生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); //开始上传

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

相关文章

  • javascript实现json页面分页实例代码

    javascript实现json页面分页实例代码

    这篇文章主要介绍了javascript实现json页面分页实例代码,需要的朋友可以参考下
    2014-02-02
  • javascript中文本框中输入法切换的问题

    javascript中文本框中输入法切换的问题

    这篇文章主要是对javascript中文本框中输入法切换的问题进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 基于javaScript的this指向总结

    基于javaScript的this指向总结

    下面小编就为大家带来一篇基于javaScript的this指向总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • TypeScript 运行时类型检查补充工具

    TypeScript 运行时类型检查补充工具

    这篇文章主要介绍了TypeScript 运行时类型检查补充工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JavaScript中三种引入方式的使用详解

    JavaScript中三种引入方式的使用详解

    JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,本文主要为大家介绍了JavaScript中三种常见引入方式,希望对大家有所帮助
    2024-01-01
  • JavaScript判断数组成员的几种方法

    JavaScript判断数组成员的几种方法

    这篇文章主要介绍了JavaScript判断数组成员的几种方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Lab.js初次使用笔记

    Lab.js初次使用笔记

    这篇文章主要介绍了Lab.js初次使用笔记,本文对比了普通动态加载JS文件的技术和使用Lab.js加载JS文件的技术,并给出了Lab.js加载示例,需要的朋友可以参考下
    2015-02-02
  • three.js中点对象(Point)和点材质(PointsMaterial)的具体使用

    three.js中点对象(Point)和点材质(PointsMaterial)的具体使用

    本文主要介绍了three.js中点对象(Point)和点材质(PointsMaterial)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • uniapp和uniCloud开发中常出现的问题及解决汇总

    uniapp和uniCloud开发中常出现的问题及解决汇总

    使用uni 开发一段时间了,下面这篇文章主要给大家介绍了关于uniapp和uniCloud开发中常出现的问题及解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • javascript截取字符串小结

    javascript截取字符串小结

    本文章收藏了多种字符截取的方法,包括常用的js截取字符串,截取字符串函数及常用的截取使用,非常的简单实用,有需要的小伙伴可以参考下。
    2015-04-04

最新评论