当前位置: 首页 > news >正文

音频转base64

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>音频转Base64</title><style>.container {max-width: 600px;margin: 2rem auto;padding: 2rem;border: 1px solid #ccc;border-radius: 8px;}.upload-box {border: 2px dashed #aaa;padding: 2rem;text-align: center;margin-bottom: 1rem;cursor: pointer;}.upload-box:hover {background-color: #f9f9f9;}#audio-preview {margin-top: 1rem;}#result {margin-top: 1rem;white-space: pre-wrap;word-break: break-all;}.hidden {display: none;}.error {color: red;margin-top: 1rem;}</style><style>/* 新增按钮样式 */.copy-btn {margin-top: 1rem;padding: 0.5rem 1rem;background-color: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;transition: background-color 0.3s;}.copy-btn:hover {background-color: #45a049;}.copy-btn:disabled {background-color: #cccccc;cursor: not-allowed;}/* 提示信息样式 */.copy-status {margin-top: 0.5rem;font-size: 0.9rem;opacity: 0;transition: opacity 0.3s;}.copy-success {color: #4CAF50;opacity: 1;}.copy-error {color: #f44336;opacity: 1;}</style>
</head>
<body><div class="container"><div class="upload-box" id="drop-zone"><p>点击选择音频文件或拖放到此处</p><input type="file" id="file-input" accept="audio/*" hidden></div><div id="audio-preview" class="hidden"></div><div id="error-message" class="error"></div><div class="container"><!-- ... 原有代码 ... --><button id="copy-btn" class="copy-btn" >复制Base64</button><div id="copy-status" class="copy-status"></div></div><div id="result"></div></div><script>// 新增变量const copyBtn = document.getElementById('copy-btn');const copyStatus = document.getElementById('copy-status');// 修改handleFile函数function handleFile(file) {// ... 原有代码 ...reader.onload = function(e) {audio.src = e.target.result;const base64 = e.target.result.split(',')[1];resultDiv.textContent = base64;// 启用复制按钮copyBtn.disabled = true;copyStatus.className = 'copy-status';  // 重置状态};}// 新增复制功能copyBtn.addEventListener('click', async () => {try {const text = resultDiv.textContent;if (!text) {throw new Error('没有可复制的内容');}await navigator.clipboard.writeText(text);showCopyStatus('复制成功!', 'success');} catch (err) {showCopyStatus(`复制失败: ${err.message}`, 'error');}});// 新增状态显示函数function showCopyStatus(message, type) {copyStatus.textContent = message;copyStatus.className = `copy-status copy-${type}`;// 3秒后淡出提示setTimeout(() => {copyStatus.style.opacity = '0';}, 3000);}// 修改showError函数function showError(message) {// ... 原有代码 ...copyBtn.disabled = true;}</script><script>const dropZone = document.getElementById('drop-zone');const fileInput = document.getElementById('file-input');const audioPreview = document.getElementById('audio-preview');const resultDiv = document.getElementById('result');const errorMessage = document.getElementById('error-message');// 点击上传区域触发文件选择dropZone.addEventListener('click', () => fileInput.click());// 处理文件选择fileInput.addEventListener('change', handleFileSelect);// 处理拖放功能dropZone.addEventListener('dragover', (e) => {e.preventDefault();dropZone.style.backgroundColor = '#f0f0f0';});dropZone.addEventListener('dragleave', () => {dropZone.style.backgroundColor = '';});dropZone.addEventListener('drop', (e) => {e.preventDefault();dropZone.style.backgroundColor = '';const files = e.dataTransfer.files;if (files.length > 0) {handleFile(files[0]);}});function handleFileSelect(e) {const file = e.target.files[0];if (file) {handleFile(file);}}function handleFile(file) {// 验证文件类型if (!file.type.startsWith('audio/')) {showError('请选择有效的音频文件');return;}// 重置状态errorMessage.textContent = '';resultDiv.textContent = '';// 显示音频预览const audio = document.createElement('audio');audio.controls = true;audioPreview.innerHTML = '';audioPreview.appendChild(audio);audioPreview.classList.remove('hidden');// 读取文件const reader = new FileReader();reader.onload = function(e) {audio.src = e.target.result;// 获取Base64编码(去掉Data URL前缀)const base64 = e.target.result.split(',')[1];resultDiv.textContent = base64;};reader.onerror = function() {showError('文件读取失败');};reader.readAsDataURL(file);}function showError(message) {errorMessage.textContent = message;audioPreview.classList.add('hidden');resultDiv.textContent = '';}</script>
</body>
</html>

相关文章:

  • SQL面试之--明明建了索引为什么失效了?
  • C语言复习笔记--内存函数
  • 《代码整洁之道》第10章 类 - 笔记
  • 跨境电商货物体积与泡重计算器:高效便捷的物流计算工具
  • Zookeeper实现分布式锁实战应用
  • 【Office-Excel】单元格输入数据后自动填充单位
  • 增强版wps-plugin-deepseek开源插件是DeepSeek 支持的 WPS 插件,在您的办公工作流程中提供智能文档自动化和 AI 驱动的生产力增强
  • 【计算机哲学故事1-2】输入输出(I/O):你吸收什么,便成为什么
  • QT6 源(53)篇三:存储 c 语言字符串的类 QByteArray 的使用举例,
  • NodeJs模块化与JavaScript的包管理工具
  • 前端开发资源缓存策略
  • 蓝桥杯 9.生命之树
  • 深入理解 JavaScript 的 typeof 运算符:返回的数据类型
  • 2024ICPC网络赛第二场题解
  • 个人介绍网站设计
  • Charles 抓包入门教程
  • 事件绑定tips
  • 【MySQL专栏】MySQL数据库表的内外连接
  • 连接远程服务器
  • Golang | 集合求交
  • 民生访谈|宝妈宝爸、毕业生、骑手……上海如何为不同人群提供就业保障
  • 新任浙江省委常委、杭州市委书记刘非开展循迹溯源学习调研
  • 学大教育:去年净利润1.797亿元,学习中心增加约60所
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调
  • 苗旋已任民航局空管局局长、党委副书记
  • 叶迪奇任陆金所控股董事长,赵容奭继续担任CEO