图片上传

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. 文件上传、下载、导出(图片上传、下载)

    一.文件上传 1.常规文件上传 input 标签 type="file", 点击接收上传的文件 <label for="file_url">< ...

  2. springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器

    springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器 1.使用easypoi导入excel 链接: easypoi详细文档. 2.导入easypoi依赖,版本可 ...

  3. Typora+PicGo+阿里云OSS实现图片上传功能

    烦恼 Typora是最好用的markdown语法的工具之一:平时做笔记都是使用这个工具,免费,简洁好用,用上之后就爱上了.但是它默认图片是放在本地的.为了用好这个工具,也是经历了一打怪之旅. 开始不做 ...

  4. uniapp 图片上传 删除

    uniapp我的示例:如下 点击加号图片:选择上传类型:图片或者文件 上传的图片可以删除 这是界面上的一系列操作,接下来我们来看如何代码实现吧 一.界面代码:展示图片 <view class=& ...

  5. vue实现图片上传功能

    vue实现图片上传功能 一.vue的核心插件 1. vuex 2. vue-router 二.服务器代理配置 三.路由配置 四.自定义axios 五.请求服务器逻辑 六.vuex-store 七.登录 ...

  6. tinymce图片上传

    一.概述 对于上传图片功能,tinymce提供了很多相关配置http://tinymce.ax-z.cn/configure/file-image-upload.php 这里我们对其中的自定义上传图片 ...

  7. Vue 图片上传功能

    Vue 图片上传功能 Vue 图片上传功能,自定义上传 限制上传类型 & 多选: ① accept 属性只能与 配合使用.它规定能够通过文件上传进行提交的文件类型. ② multiple 属性 ...

  8. TCP编程及实现图片上传

    获取主机名和IP InetAddress localIPAdress=InetAddress.getLocalHost();System.out.println("IP:"+loc ...

  9. 细粒度,图片上传,POI技术

    今日内容 项目组件完善 图片上传 细粒度权限控制 POI技术 第一章 附件管理 1. 附件列表 在export_manager_web模块的com.itheima.web.controller.car ...

最新文章

  1. 【Linux】21.Linux输入输出重定向、2>1、标准输入、标准输出、标准错误
  2. jvm最大内存限制多少?
  3. c获取文件的名字和运行到程序的第几行功能
  4. 4g 中bis代表什么_BIS的完整形式是什么?
  5. HTML+CSS+JS实现 ❤️高光立体游戏卡片悬停ui特效❤️
  6. 大型网站架构系列:缓存在分布式系统中的应用(三)
  7. pythonjam教程_Python学习:安装配置pycharm编辑器教程
  8. C++ 构造函数抛出异常注意事项
  9. 基于lis3dh的简易倾角仪c源码_cm-23D柯尼卡美能达分光测色计色差仪CM-2300d
  10. 21天学通JAVA:如何使用现有类
  11. ACL在QinQ port 中的应用
  12. Subversion 服务配置安装手记(一)
  13. 北京理工大学c语言作业三做一年级算术题,北京理工大学C语言编程题_答案
  14. 基于FPGA的DHT11数字温湿度传感器测试
  15. nominal,ordinal,interval,ratio variable的区别为:意思不同、用法不同。
  16. manjaro xfce 环境配置
  17. 制作NGUI动态字体
  18. 黄金价格走势分析,国内十大现货黄金正规平台排名
  19. 民建浙江省委会副主委郭吉丰建言补齐数字经济短板
  20. 摄像机服务器端返回消息错误,_平安城市_视频监控(本科)毕业论文设计.doc

热门文章

  1. 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes
  2. php机柜,标准机柜尺寸表
  3. 全国计算机等级考试二级教程:c语言程序设计(2013年版),全国计算机等级考试二级教程:C语言程序设计(2013年版)...
  4. 企业公司网站模板 免费下载
  5. UE4_Niagara基础3_学习笔记_受击效果制作
  6. 74HCT04D基本参数介绍
  7. Rhapsody软件框架和UML的实时系统开发
  8. 智能公交报站系统RFID解决方案
  9. java 编配和弦_11月18日珠三角城市人口迁徙可视化(和弦图)
  10. 华为“二次替代”的本事如何练就?