原生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避免代码的重复执行经验技巧分享
Apr 17 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
一些实用性较高的js方法
Apr 19 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 Javascript
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 Javascript
node.js监听文件变化的实现方法
Apr 17 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 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
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
pytorch中图像的数据格式实例
2020/02/11 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
python实现简单的五子棋游戏
2020/09/01 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
预备党员思想汇报
2014/01/08 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
质量提升方案
2014/06/16 职场文书
影视广告专业求职信
2014/09/02 职场文书
教师党员整改措施
2014/10/24 职场文书
个人学习总结范文
2015/02/15 职场文书
城管个人总结
2015/02/28 职场文书
稽核岗位职责范本
2015/04/13 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python