原生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 相关文章推荐
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
Dec 02 Javascript
基于jquery插件编写countdown计时器
Jun 12 Javascript
Javascript动画效果(3)
Oct 11 Javascript
javascript操作cookie
Jan 17 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
详解Angular结合zTree异步加载节点数据
Jan 20 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
Jan 15 jQuery
LayUi数据表格自定义赋值方式
Oct 26 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
python win32 简单操作方法
2017/05/25 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
关于python字符串方法分类详解
2019/08/20 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Python chardet库识别编码原理解析
2020/02/18 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
python3.4中清屏的处理方法
2020/07/06 Python
python redis存入字典序列化存储教程
2020/07/16 Python
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
护理专业自荐书
2014/06/04 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
奠基仪式致辞
2015/07/30 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
详解Redis基本命令与使用场景
2021/06/01 Redis