原生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 相关文章推荐
JavaScript 实现模态对话框 源代码大全
May 02 Javascript
jQuery代码优化 事件委托篇
Nov 01 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
浅谈javascript中onbeforeunload与onunload事件
Dec 10 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
jquery+json实现分页效果
Mar 07 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 Javascript
element中Steps步骤条和Tabs标签页关联的解决
Dec 08 Javascript
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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
基于PHP array数组的教程详解
2013/06/05 PHP
php中explode函数用法分析
2014/11/15 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
详解参数传递四种形式
2015/07/21 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
javascript中的面向对象
2017/03/30 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
Django中间件工作流程及写法实例代码
2018/02/06 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
实习教师个人的自我评价
2013/11/08 职场文书
小学生作文评语
2014/04/18 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
实施意见格式范本
2015/06/05 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
Python提取PDF指定内容并生成新文件
2021/06/09 Python
Python3中最常用的5种线程锁实例总结
2021/07/07 Python