原生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 XML操作 封装类
Jul 01 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 Javascript
JS验证不重复验证码
Feb 10 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 Javascript
JS构造一个html文本内容成文件流形式发送到后台
Jul 31 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
JS数组Object.keys()方法的使用示例
Jun 05 Javascript
js 对象使用的小技巧实例分析
Nov 08 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 Javascript
JavaScript实现无限轮播效果
Nov 19 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的图形函数中显示汉字
2006/10/09 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
对于this和$(this)的个人理解
2013/09/08 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
python删除列表内容
2015/08/04 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
工作中个人的自我评价
2013/12/31 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
函授本科自我鉴定
2014/02/04 职场文书
勤俭节约倡议书
2014/04/14 职场文书
药剂专业自荐书
2014/06/20 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
校运会通讯稿
2015/07/18 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL