原生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 相关文章推荐
激活 ActiveX 控件
Oct 09 Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 Javascript
js 窗口抖动示例
Sep 04 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
Dec 22 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
JavaScript鼠标悬停事件用法解析
May 15 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 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
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
python的id()函数解密过程
2012/12/25 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python下载微信公众号相关文章
2019/02/26 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
计算机毕业大学生推荐信
2013/12/01 职场文书
实用的简历自我评价
2014/03/06 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
企业计划生育责任书
2015/05/09 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
Python中npy和mat文件的保存与读取
2022/04/24 Python
Python保存并浏览用户的历史记录
2022/04/29 Python