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的MessageBox
Dec 03 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
Angularjs 基础入门
Dec 26 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
layui获取选中行数据的实例讲解
Aug 19 Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 Javascript
Javascript中的this,bind和that使用实例
Dec 05 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
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
Python入门_浅谈for循环、while循环
2017/05/16 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
python3访问字典里的值实例方法
2020/11/18 Python
利用python实现汉诺塔游戏
2021/03/01 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
客户接待方案
2014/02/26 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
运动会横幅标语
2014/06/17 职场文书
党员民主评议个人总结
2014/10/20 职场文书
庆七一活动简报
2015/07/20 职场文书
学生病假条怎么写
2015/08/17 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery