原生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简单限制textarea内输入字符数量的方法
Oct 14 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
Mar 30 Javascript
js鼠标移动时禁止选中文字
Feb 19 Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
微信小程序 input输入及动态设置按钮的实现
Oct 27 Javascript
图片加载完成再执行事件的实例
Nov 16 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
Jul 12 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
vue+Element-ui实现分页效果
Nov 15 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
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
试用php中oci8扩展
2015/06/18 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
python 字符串格式化代码
2013/03/17 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
房产委托公证书
2014/04/08 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
销售2014年度工作总结
2014/12/08 职场文书
第一节英语课开场白
2015/06/01 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python