讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在网页中正确实现音频文件的下载功能

阿萱小哥_4801

阿萱小哥_4801

发布时间:2026-02-03 13:03:26

|

849人浏览过

|

来源于php中文网

原创

如何在网页中正确实现音频文件的下载功能

本文讲解如何通过纯 html 方式(无需 javascript)安全、准确地下载 mp3 音频文件,避免因 blob 构造错误导致文件损坏或体积异常(如仅 25 字节)的问题。

在 Web 开发中,直接通过

const blob = new Blob([audio], {type:"octet-steam"});

这里将整个

✅ 正确做法是绕过 JavaScript 操作媒体元素,改用原生 HTML 的 download 属性配合直接文件 URL:

Wechat Article Html
Wechat Article Html

将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。

下载
<tbody id="tbody">
<?php
for ($i = 0; $i < $count; $i++) {
    $res = mysqli_fetch_array($result);
    $filePath = "mp3/{$res['song_artist']}-{$res['song_title']}.mp3";
?>
    <tr>
        <td><audio src="<?= htmlspecialchars($filePath) ?>" controls preload="metadata" style="width: 200px;"></td>
        <td><a href="<?= htmlspecialchars($filePath) ?>" download="<?= htmlspecialchars("{$res['song_artist']}-{$res['song_title']}.mp3") ?>">&#8628</a></td>
    </tr>
<?php } ?>
</tbody>

? 关键改进说明:

  • 使用 原生属性:浏览器会发起真实 HTTP GET 请求并保存响应体为文件,确保字节级完整性;
  • download 属性值支持自定义文件名(推荐动态生成,如 {$res['song_artist']}-{$res['song_title']}.mp3),提升用户体验;
  • htmlspecialchars() 防止路径中特殊字符(如空格、&、' 等)引发 HTML 解析错误或 XSS 风险;
  • 移出循环,保证 HTML 结构语义正确(单个 包含多行 )。

    ⚠️ 注意事项:

    • 确保 MP3 文件路径可被浏览器直接访问(即位于 Web 根目录下,如 /mp3/...),且服务器未禁止跨域下载或添加了 Content-Disposition: attachment 等干扰头;
    • 若音频资源受权限控制(如需登录/Token),则必须使用后端代理接口返回文件流,并配合 fetch + Blob + URL.createObjectURL —— 但此时需正确读取响应流:
      fetch('/api/download?file=xxx.mp3')
        .then(res => res.blob())
        .then(blob => {
          const url = URL.createObjectURL(blob);
          const a = Object.assign(document.createElement('a'), { href: url, download: 'xxx.mp3' });
          document.body.appendChild(a);
          a.click();
          URL.revokeObjectURL(url);
          a.remove();
        });
    • 不要滥用 type: "octet-stream"(注意拼写应为 octet-stream,原文 octet-steam 是错别字),它仅影响 MIME 类型声明,无法解决源数据错误。

    总结:优先使用语义化 HTML 实现下载;仅当需动态生成内容、添加请求头或处理权限逻辑时,才引入 JavaScript + Blob 方案,并务必确保 Blob 输入为真实的二进制数据(如 ArrayBuffer 或 Uint8Array)。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

14306

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1685

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3957

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

6121

2024.03.01

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3188

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

5089

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3829

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

466

2026.01.19

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn