原生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资料toString 方法
Mar 13 Javascript
jquery 查找新建元素代码
Jul 06 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
Aug 03 Javascript
vue-scroller记录滚动位置的示例代码
Jan 17 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
JS实现的对象去重功能示例
Jun 04 Javascript
关于Node.js中频繁修改代码重启服务器的问题
Oct 15 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
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中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php实现的用户查询类实例
2015/06/18 PHP
用js遍历 table的脚本
2008/07/23 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
es6数值的扩展方法
2019/03/11 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python实现屏幕截图的两种方式
2018/02/05 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
生物科学专业职业规划书范文
2014/02/11 职场文书
高一学生评语大全
2014/04/25 职场文书
实践单位评语
2014/04/26 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
儿园租房协议书范本
2014/12/02 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
公司辞职信模板
2015/05/13 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
Python学习开发之图形用户界面详解
2021/08/23 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript