原生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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
Angular实现下载安装包的功能代码分享
Sep 05 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
Ajax是什么?Ajax高级用法之Axios技术
Apr 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
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
JS实现多功能计算器
2020/10/28 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python中property和setter装饰器用法
2019/12/19 Python
如何基于Python按行合并两个txt
2020/11/03 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
腾讯公司的一个sql题
2013/01/22 面试题
生态学毕业生自荐信
2013/10/27 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
财务部岗位职责范本
2015/04/14 职场文书
会计做账心得体会
2016/01/22 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript