原生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 相关文章推荐
jQuery点击tr实现checkbox选中的方法
Mar 19 Javascript
使用js实现的简单拖拽效果
Mar 18 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 Javascript
Javascript的promise,async和await的区别详解
Mar 24 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
文件上传类
2006/10/09 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
ES6的新特性概览
2016/03/10 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
pytorch打印网络结构的实例
2019/08/19 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
司机辞职报告范文
2014/01/20 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
草房子读书笔记
2015/06/29 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
httpclient调用远程接口的方法
2022/08/14 Java/Android