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 获取Listbox选择的值的代码
Apr 15 Javascript
提升你网站水平的jQuery插件集合推荐
Apr 19 Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
删除节点的jquery代码
Jan 13 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
Jan 14 Javascript
莱鸟介绍window.print()方法
Jan 06 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 Javascript
详解vue身份认证管理和租户管理
May 25 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
php懒人函数 自动添加数据
2011/06/28 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Django Highcharts制作图表
2016/08/27 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
python如何写try语句
2020/07/14 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
旅游管理毕业生自荐书
2014/02/02 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
工作后的感想
2015/08/07 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
MongoDB支持的数据类型
2022/04/11 MongoDB