前端 react点击按钮下载图片到本地

经过不懈努力(主要是百度哈哈哈哈)终于实现了!!!

直接上代码吧!!!

  //点击下载图片
 const downloadImage = (imgsrc, name, type = 'png') => {
    var src = imgsrc;
        var canvas = document.createElement('canvas');
        var img = document.createElement('img');
        img.onload = function(e) {
            canvas.width = img.width;
            canvas.height = img.height;
            var context = canvas.getContext('2d');
            context.drawImage(img, 0, 0, img.width, img.height);         
            canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
            canvas.toBlob((blob)=>{
                let link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = name; 
                link.setAttribute("crossOrigin",'Anonymous');
                link.click();  
            }, "image/jpeg");           
        }
        img.src ="data:image/png;base64,"+ src;
  }
<Button onClick={()=>downloadImage(post,"post","png")} style={{backgroundColor:"#ff951d",color:"white"}}>保存海报</Button>


<img id={"postsId"} style={{width:"85%"}} src={"data:image/png;base64,"+post}/>

这里要注意的是图片从后端返回的时候最好是base64地址,不然的话可能会报其他的错误(我就因为后端直接返回的图片网址报跨域错误 也没想着咋解决 直接叫他返回base64试试结果成功了) 我们后端返回的时候没有带data:image/png;base64,我就自己手动加上了

最后实现效果如图

有其他办法的大佬欢迎多多指教 !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,你需要使用前端框架(如Vue、React等)和后端技术(如Node.js、PHP等)来完成。下面是一个基本的实现步骤: 1. 在前端页面中创建一个按钮,当用户点击该按钮时,向后端发送请求,请求数据。 2. 后端接收到请求后,从数据库中获取数据,并将数据按照一定格式(如JSON)返回给前端。 3. 前端接收到数据后,将数据转换为Excel文件格式。这里可以使用第三方库(如SheetJS)来帮助实现。 4. 将生成的Excel文件保存到本地。这可以通过使用浏览器的下载功能来实现。 下面是一个大致的代码实现示例: 前端代码: ```html <template> <div> <button @click="exportData">导出数据</button> </div> </template> <script> import axios from 'axios' import XLSX from 'xlsx' export default { methods: { async exportData() { const response = await axios.get('/api/data') const data = response.data const wb = XLSX.utils.book_new() data.forEach((item, index) => { const ws = XLSX.utils.json_to_sheet(item) XLSX.utils.book_append_sheet(wb, ws, `Sheet ${index + 1}`) }) XLSX.writeFile(wb, 'data.xlsx') } } } </script> ``` 后端代码(使用Node.js和Express框架): ```javascript const express = require('express') const XLSX = require('xlsx') const { Pool } = require('pg') const pool = new Pool({ user: 'your_username', host: 'your_database_host', database: 'your_database_name', password: 'your_database_password', port: 5432 }) const app = express() app.get('/api/data', async (req, res) => { const client = await pool.connect() try { const result = await client.query('SELECT * FROM your_table') const data = result.rows res.json(data) } finally { client.release() } }) app.listen(3000, () => console.log('Server started on port 3000')) ``` 需要注意的是,这只是一个基本的实现示例,你还需要根据自己的具体业务需求进行相应的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值