Javascript读取上传文件内容/类型/字节数


Posted in Javascript onApril 30, 2019

在网站开发的某些情况下我们需要上传文件到服务器,在这个过程中可能会对文件做一定的限制,比如说文件格式,文件大小等,在一些情况下我们上传文件其实是为了获取其中的内容在前端区域展示,这个时候就不需要将文件上传到服务器,完全可以通过Javascript来获取上传文件内容然后进行展示,既加快了操作速度,也减轻了服务器的负载和存储。接下来就是一个实际操作的过程:

首先来看一下一个上传文件对象的属性:

Javascript读取上传文件内容/类型/字节数

UI设计(React+Material-ui)

...
const styles = theme => ({
formControl: {
 margin: theme.spacing.unit,
 minWidth: 120,
 width: '100%',
 },
 leftIcon: {
 marginRight: theme.spacing.unit,
 }
 })
...
 <Grid item xs>
 <FormControl
  className={classes.formControl}
  error={this.state.Err.includes('sqlStr')}
 >
  <TextField
  label="SQL"
  onChange={this.onTextChange('sqlStr')}
  value={this.state.sqlStr}
  placeholder="Add Select SQL here..."
  multiline
  InputLabelProps={{
   shrink: true,
  }}
  fullWidth
  rows={6}
  variant="outlined"
  />
  <FormHelperText>{this.state.sqlStrErr}</FormHelperText>
  <input
  style={{display: 'none'}}
  name="uploadSqlFile"
  id="uploadSqlFile"
  onChange={this.handleUploadSqlFile}
  type="file"
  />
  <label htmlFor="uploadSqlFile" style={{position: 'absolute', right: '0px',bottom: '20px', background:'#f5f0ff'}}>
  <Button color="primary" variant="outlined" component="span">
  <CloudUploadOutlined className={classes.leftIcon} />OR UPLOAD SQL FILE
  </Button>
  </label>
 </FormControl>
 </Grid>
 ...

效果图如下:

Javascript读取上传文件内容/类型/字节数

操作绑定,分别包含前端文件内容读取和文件上传

handleUploadSqlFile = event => {
 let that = this
 const selectedFile = event.target.files[0]
 if(selectedFile.type.includes('text') || selectedFile.type === ''){
  let reader = new FileReader();// !important
  reader.readAsText(selectedFile, "UTF-8");// !important
  reader.onload = function(evt){// !important
  let sqlStr = evt.target.result;// !important
  that.setState({
  Err: that.state.Err.filter(c => c !== 'sqlStr'),
  sqlStr: sqlStr,
  sqlStrErr: '*Avoid duplicated column fields',
  })
 }
 }else {
  let sqlStrErr = 'File format is not supported!'
  if ((selectedFile.size / 1024 / 1024).toFixed(4) >= 2) {//计算文件大小并且换算成M为单位
  sqlStrErr = 'File size exceeds the limitation (2M)!'
  }
  this.setState({
  Err: [...this.state.Err, 'sqlStr'],
  sqlStrErr: sqlStrErr
  })
 }
}

上边的示例只是单纯的前端文件内容读取,并未涉及文件上传到服务器,接下来是:

import axios from 'axios'
...
handleUploadSqlFile = event => {
 const selectedFile = event.target.files[0]
 if ((selectedFile.size / 1024 / 1024).toFixed(4) >= 10) {
  this.setState({ sqlStrErr: 'File size exceeds the limitation (10M)!' })
 } else {
  const data = new FormData()
  data.append('file', selectedFile, selectedFile.name)
  axios
  .post('/api/utils/upload_file', data, {
   onUploadProgress: ProgressEvent => {
   this.setState({
    loaded: (ProgressEvent.loaded / ProgressEvent.total) * 100 - Math.random() * 16,//此值用来展示上传进度,好让用户知道目前的上传状态。
   })
   },
  })
  .then(res => {
   if (res.data.code === -1) {
   this.setState({ sqlStrErr: res.data.info })
   } else {
   this.setState({
    loaded: 100,
   })
   }
  })
 }
 }

如果看了上边的代码示例还搞不定欢迎留言提问!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
第一次接触神奇的Bootstrap菜单和导航
Aug 01 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
js实现产品缩略图效果
Mar 10 Javascript
vux uploader 图片上传组件的安装使用方法
May 15 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
NProgress显示顶部进度条效果及使用详解
Sep 21 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
vue动态设置路由权限的主要思路
Jan 13 Vue.js
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 #Javascript
vue+web端仿微信网页版聊天室功能
Apr 30 #Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 #Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 #Javascript
详解JS实现系统登录页的登录和验证
Apr 29 #Javascript
实例详解vue中的$root和$parent
Apr 29 #Javascript
微信网页登录逻辑与实现方法
Apr 29 #Javascript
You might like
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
Python yield 使用浅析
2015/05/28 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
基于PyTorch中view的用法说明
2021/03/03 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
保密普查工作实施方案
2014/02/25 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
演讲开场白台词大全
2015/05/29 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
Python实现自动玩连连看的脚本分享
2022/04/04 Python