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


Posted in Javascript onSeptember 08, 2018

本文实例为大家分享了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 相关文章推荐
js类的静态属性和实例属性的理解
Oct 01 Javascript
5个javascript的数字格式化函数分享
Dec 07 Javascript
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
jQuery实现的导航条切换可显示隐藏
Oct 22 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
Aug 22 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
微信小程序实现图片上传功能
May 28 Javascript
JavaScript随机数的组合问题案例分析
May 16 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
JS实现可视化文件上传
Sep 08 #Javascript
js实现文件上传功能 后台使用MultipartFile
Sep 08 #Javascript
vue-router的HTML5 History 模式设置
Sep 08 #Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 #Javascript
react 父子组件之间通讯props
Sep 08 #Javascript
js代码规范之Eslint安装与配置详解
Sep 08 #Javascript
vue弹窗插件实战代码
Sep 08 #Javascript
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
php银联网页支付实现方法
2015/03/04 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
js tab效果的实现代码
2009/12/26 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
深入了解js原型模式
2019/05/30 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python实现顺序表的简单代码
2018/09/28 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
pandas参数设置的实用小技巧
2020/08/23 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
综合办公室岗位职责
2015/04/11 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
如何使用pdb进行Python调试
2021/06/30 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS