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 相关文章推荐
event对象的方法 兼容多浏览器
Jun 27 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
jQuery插件开发详细教程
Jun 06 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
基于JavaScript代码实现自动生成表格
Jun 15 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 Javascript
HTML的select控件美化
Mar 27 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
详解微信小程序-扫一扫 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
PHP与javascript的两种交互方式
2006/10/09 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
python查询sqlite数据表的方法
2015/05/08 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python中的格式化输出用法总结
2016/07/28 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
python之信息加密题目详解
2019/06/26 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python日志syslog使用原理详解
2020/02/18 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
error和exception有什么区别
2012/10/02 面试题
店面销售职位的职责
2014/03/09 职场文书
房产买卖委托公证书
2014/04/04 职场文书
高三霸气励志标语
2014/06/24 职场文书
教师职位说明书
2014/07/29 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书