图片上传与excel的导出
图片上传
1.通过fileReader 对象将图片变成base64 和一个字符串一样使用 可以直接入库
把上传的图片的数据直接存到数据库就行
import React, { PureComponent, createRef } from "react";
class AddGoods extends PureComponent {fileRef = createRef();state = {img: ""}getBase64 = () => {const file= this.fileRef.current.files[0]const reader= new FileReader();console.log(reader)reader.onload= () => {console.log('base64转换完成')console.log(reader.result)this.setState({ img: reader.result})}reader.readAsDataURL(file)}render() {return (<div><input ref={this.fileRef } type="file" /><button onClick={this.getBase64}>获取图片</button><img src={this.state.img} alt="" /></div>);}componentDidMount() {}
}export default AddGoods;
2. 通过formdata 服务端将文件保存到服务器 之后将图片的服务器路径入库
* 通过input file 获取图片信息
* 将文件加入到formdata对象中
* 后端会从formdata对象解析图片的数据流
* 将图片保存到服务器下(可以是自己的服务器也可以是图床) -> 产生一个找到图片的路径
* 将路径保存到数据库 返回给前端
import React, { PureComponent, createRef } from "react";
import { uploadFile } from "@/api"
class AddGoods extends PureComponent {fileRef = createRef();state = {img: ""}getFormData = async () => {const file= this.fileRef.current.files[0]const form = new FormData();form.append("hehe",file)const result = await uploadFile(form) //把图片存到服务器//console.log(result)this.setState({img:`http://localhost:3000${result.path}`})}render() {return (<div><input ref={this.fileRef } type="file" /><button onClick={this.getFormData}>获取图片</button><img src={this.state.img} alt="" /></div>);}componentDidMount() {}
}export default AddGoods;
Excel的导出
https://note.youdao.com/ynoteshare/index.html?id=5e08fd7ecc4d68c185b781a8496de384&type=note&_time=1654093459460https://note.youdao.com/ynoteshare/index.html?id=5e08fd7ecc4d68c185b781a8496de384&type=note&_time=1654093459460
1. 纯前端的导入导出
2. 后端提供一个下载链接
3. 通过ajax接口返回二进制数据流实现导出
方式1:纯前端方式导出
用到的不多
需要用到插件xlsx
import React, { Component } from 'react';
import XLSX from "xlsx"
console.log(XLSX)
class ExportElsx extends Component {createElsx(){// 获取表格的dom元素var elt = document.getElementsByTagName('table')[0];console.log(elt)// 将表格的dom 元素转化为 excel工作薄var wb = XLSX.utils.table_to_book(elt, {sheet:"Sheet JS"});// 将工作薄导出为excel文件XLSX.writeFile(wb,'呵呵哒.xlsx');}state = { }render() { return ( <div><table><tr><td>序号</td><td>名字</td><td>描述</td><td>呵呵</td></tr><tr><td>1</td><td>韩梅梅</td><td>好看</td><td>呵呵</td></tr><tr><td>2</td><td>李蕾蕾</td><td>呵呵</td><td>呵呵</td></tr></table><button onClick={this.createElsx}>导出excel</button></div>);}
}export default ExportElsx;
方式2:后端给个链接的方式导出
直接通过后端返回来的接口通过window.open()进行打开这个链接,就会下载excel到本地,但是用户体验不好,页面会抖动一下,通过用iframe体验会更好,页面不会抖动,但是在react组件里面用不了
以下是两种方式在原生js的用法
<body>
<!-- iframe 下载测试 1-->
<button onclick='download()'>iframe</button>
<iframe name='myFrame' style="display:none;"></iframe>
<script>function download(){window.open('http://localhost:3001/admin/export','myFrame')}
</script>
<!-- <!-- <!-- 下载测试2 --><button onclick='download()'>open下载</button>
<script>function download(){window.open('http://localhost:3001/admin/export')}
</script>
在react组件里面用的时候
import React, { Component } from 'react';
import XLSX from "xlsx"
class ExportElsx extends Component {state = { }download = () => {window.open('http://localhost:3001/admin/export')// window.open('http://localhost:3001/kind/exportExcel','myFrame') //这是通过iframe的方法,但是在react组件里面不行}render() { return ( <div><button onClick={this.download}>导出excel</button><hr />通过iframe实现下载// <iframe name='myFrame' style="display:none;"></iframe> 会报错,在react里面不支持这样写<button onClick={this.download}>iframe下载</button></div>);}
}export default ExportElsx;
方式3: 通过ajax接口返回二进制数据流实现导出
export const uploadExcel = (data = {}) => {let url = "/api/admin/export";return new Promise((resolve,reject) => {axios({url,method: "POST",responseType: 'arraybuffer',}).then((res) => {console.log(res)// 将接口请求回来的数据流转化连接const loadstream = window.URL.createObjectURL(new Blob([res.data]))// 从header里获取文件名const contentDisposition = res.headers['content-disposition'] || '';const encodedFilename = contentDisposition.split('=')[1];//给导出的excel取后端写的文件名字const filename = decodeURIComponent(encodedFilename);// 创建一个a标签来下载文件const link = document.createElement('a')link.style.display = 'none'link.href = loadstreamlink.download=filenamedocument.body.appendChild(link)// 模拟点击按标签if (navigator.userAgent.indexOf('Firefox') > -1) {// 火狐浏览器不支持click()const evt = document.createEvent('MouseEvents');evt.initEvent('click', true, true);link.dispatchEvent(evt);} else {link.click();}// 释放a标签和bobel对象document.body.removeChild(link)window.URL.revokeObjectURL(loadstream) // 释放掉blob对象resolve({ code:0, msg: "导出成功"})})})};
上面是一个处理二进制流转化成Excel的接口进行处理
在用的时候直接通过这个接口来处理数据就行
用的时候
//通过按钮来触发这个方法<Button key="button" type="primary" onClick={this.uploadExcel}>导出数据</Button>
// 导出数据,在组件里面定义了一个方法uploadExcel = async() => {const result = await uploadExcel({})const { code, msg} = result;if(!code) {message.success(msg)}}
图片上传与excel的导出相关推荐
- 文件上传、下载、导出(图片上传、下载)
一.文件上传 1.常规文件上传 input 标签 type="file", 点击接收上传的文件 <label for="file_url">< ...
- springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器
springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器 1.使用easypoi导入excel 链接: easypoi详细文档. 2.导入easypoi依赖,版本可 ...
- Typora+PicGo+阿里云OSS实现图片上传功能
烦恼 Typora是最好用的markdown语法的工具之一:平时做笔记都是使用这个工具,免费,简洁好用,用上之后就爱上了.但是它默认图片是放在本地的.为了用好这个工具,也是经历了一打怪之旅. 开始不做 ...
- uniapp 图片上传 删除
uniapp我的示例:如下 点击加号图片:选择上传类型:图片或者文件 上传的图片可以删除 这是界面上的一系列操作,接下来我们来看如何代码实现吧 一.界面代码:展示图片 <view class=& ...
- vue实现图片上传功能
vue实现图片上传功能 一.vue的核心插件 1. vuex 2. vue-router 二.服务器代理配置 三.路由配置 四.自定义axios 五.请求服务器逻辑 六.vuex-store 七.登录 ...
- tinymce图片上传
一.概述 对于上传图片功能,tinymce提供了很多相关配置http://tinymce.ax-z.cn/configure/file-image-upload.php 这里我们对其中的自定义上传图片 ...
- Vue 图片上传功能
Vue 图片上传功能 Vue 图片上传功能,自定义上传 限制上传类型 & 多选: ① accept 属性只能与 配合使用.它规定能够通过文件上传进行提交的文件类型. ② multiple 属性 ...
- TCP编程及实现图片上传
获取主机名和IP InetAddress localIPAdress=InetAddress.getLocalHost();System.out.println("IP:"+loc ...
- 细粒度,图片上传,POI技术
今日内容 项目组件完善 图片上传 细粒度权限控制 POI技术 第一章 附件管理 1. 附件列表 在export_manager_web模块的com.itheima.web.controller.car ...
最新文章
- 【Linux】21.Linux输入输出重定向、2>1、标准输入、标准输出、标准错误
- jvm最大内存限制多少?
- c获取文件的名字和运行到程序的第几行功能
- 4g 中bis代表什么_BIS的完整形式是什么?
- HTML+CSS+JS实现 ❤️高光立体游戏卡片悬停ui特效❤️
- 大型网站架构系列:缓存在分布式系统中的应用(三)
- pythonjam教程_Python学习:安装配置pycharm编辑器教程
- C++ 构造函数抛出异常注意事项
- 基于lis3dh的简易倾角仪c源码_cm-23D柯尼卡美能达分光测色计色差仪CM-2300d
- 21天学通JAVA:如何使用现有类
- ACL在QinQ port 中的应用
- Subversion 服务配置安装手记(一)
- 北京理工大学c语言作业三做一年级算术题,北京理工大学C语言编程题_答案
- 基于FPGA的DHT11数字温湿度传感器测试
- nominal,ordinal,interval,ratio variable的区别为:意思不同、用法不同。
- manjaro xfce 环境配置
- 制作NGUI动态字体
- 黄金价格走势分析,国内十大现货黄金正规平台排名
- 民建浙江省委会副主委郭吉丰建言补齐数字经济短板
- 摄像机服务器端返回消息错误,_平安城市_视频监控(本科)毕业论文设计.doc
热门文章
- 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes
- php机柜,标准机柜尺寸表
- 全国计算机等级考试二级教程:c语言程序设计(2013年版),全国计算机等级考试二级教程:C语言程序设计(2013年版)...
- 企业公司网站模板 免费下载
- UE4_Niagara基础3_学习笔记_受击效果制作
- 74HCT04D基本参数介绍
- Rhapsody软件框架和UML的实时系统开发
- 智能公交报站系统RFID解决方案
- java 编配和弦_11月18日珠三角城市人口迁徙可视化(和弦图)
- 华为“二次替代”的本事如何练就?