vue 图片转base64本地路径跨域

在Vue项目中,遇到图片本地路径导致的跨域问题,可以通过两种方式解决:1) 使用nginx配置监听端口转发;2) 将图片放入项目目录,确保与项目在同一地址下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

代码

getUrlBase64(url, ext, callback) {
                    var canvas = document.createElement("canvas");   //创建canvas DOM元素
                var ctx = canvas.getContext("2d");
                var img = new Image;
                img.crossOrigin = 'Anonymous';//外网访问必须加否则会报错
                img.src = url;
                img.onload = function () {
                    canvas.height = 140; //指定画板的高度,自定义
                    canvas.width = 120; //指定画板的宽度,自定义
                    ctx.drawImage(img, 0, 0, 140, 120); //参数可自定义 高度,宽度
                    var dataURL = canvas.toDataURL("image/" + ext);
                    callback.call(this, dataURL); //回掉函数获取Base64编码
                    canvas = null;
                };

            },
### Vue 中实现 Base64 文件上传 在 Vue 应用程序中,可以通过前端将文件换为 Base64 编码字符串,并将其发送到后端进行处理。以下是完整的示例代码以及说明。 #### 前端部分:将文件换为 Base64 并上传 通过 `FileReader` 对象可以轻松地将文件读取为 DataURL(即 Base64 字符串)。以下是一个简单的 Vue 组件示例: ```html <template> <div> <input type="file" @change="handleFileChange" /> <button @click="uploadFile">上传</button> </div> </template> <script> export default { data() { return { base64Data: null, }; }, methods: { handleFileChange(event) { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { this.base64Data = reader.result; // 将文件内容作为 Base64 存储 }; reader.readAsDataURL(file); } }, uploadFile() { if (!this.base64Data) { alert("请选择一个文件!"); return; } // 调用 API 发送 Base64 数据给后端 fetch('http://your-backend-api/upload', { // 替换为实际的后端接口地址 method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ image: this.base64Data }), }) .then((response) => response.json()) .then((data) => console.log(data)) .catch((error) => console.error(error)); }, }, }; </script> ``` 上述代码实现了以下几个功能: 1. 用户可以选择一个文件并通过事件监听器捕获该文件[^2]。 2. 使用 `FileReader` 的 `readAsDataURL` 方法将文件读取为 Base64 编码字符串。 3. 当用户点击“上传”按钮时,会调用后端 API 并传递 Base64 数据[^1]。 --- #### 后端部分:接收 Base64 并保存为图片 假设后端使用的是 Spring Boot,则可以在控制器中编写如下逻辑来解析 Base64 并保存图片: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/upload") public class FileUploadController { @PostMapping public String upload(@RequestBody Map<String, String> payload) throws Exception { String base64String = payload.get("image"); String filePath = "/path/to/save/image.png"; // 定义保存路径 try { Base64Util.GenerateImage(base64String, filePath); // 工具类用于解码并保存图片 return "成功保存图片"; } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } } ``` 以上代码展示了如何接收来自前端的 Base64 数据,并利用工具类 `Base64Util` 将其保存为本地图片文件。 --- ### 注意事项 - **性能优化**:对于大文件,建议直接传输二进制流而非 Base64,因为后者会使数据量增加约 33%。 - **安全性**:验证接收到的数据是否合法,防止恶意攻击。 - **配置**:如果前后端分离部署,请确保服务器支持 CORS 请求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值