You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tauri+Vue.js中播放本地音频文件?

解决方案:Tauri + Vue.js 播放本地MP3文件

针对你遇到的本地音频文件加载问题,这里提供两种可行的解决方法:


方法一:正确配置并使用 convertFileSrc

ERR_CONNECTION_REFUSED 是因为未在Tauri配置中授权访问目标文件路径,按以下步骤修复:

1. 修改 Tauri 配置文件

打开 tauri.conf.json,在 tauri.security.assetScope 中添加AppData目录的访问权限:

{
  "tauri": {
    "security": {
      "assetScope": [
        "**/AppData/Roaming/com.tauri.dev/**"
      ]
    }
  }
}

生产环境建议缩小权限范围,避免使用过于宽松的 **。

2. 优化 Vue 组件代码

利用Vue的响应式绑定自动处理资源加载,无需手动操作DOM:

<template>
  <video controls>
    <source :src="sourceUrl" type="audio/mpeg">
  </video>
</template>

<script setup>
import { ref } from 'vue'
import { appDataDir, join, convertFileSrc } from '@tauri-apps/api/path'

const sourceUrl = ref('')

async function loadAudio() {
  const appDataDirPath = await appDataDir()
  const filePath = await join(appDataDirPath, 'test.mp3')
  sourceUrl.value = convertFileSrc(filePath)
}

// 组件挂载时加载音频
loadAudio()
</script>

方法二:通过 readBinaryFile 生成 Object URL

如果你更倾向于直接读取文件内容,可以将 Uint8Array 转换为Blob后生成浏览器可识别的URL:

<template>
  <video controls>
    <source :src="sourceUrl" type="audio/mpeg">
  </video>
</template>

<script setup>
import { ref, onUnmounted } from 'vue'
import { readBinaryFile, BaseDirectory } from '@tauri-apps/api/fs'

const sourceUrl = ref('')
let objectUrl = ''

async function loadAudio() {
  const content = await readBinaryFile('test.mp3', { dir: BaseDirectory.AppData })
  const blob = new Blob([content], { type: 'audio/mpeg' })
  objectUrl = URL.createObjectURL(blob)
  sourceUrl.value = objectUrl
}

// 组件卸载时释放URL,避免内存泄漏
onUnmounted(() => {
  if (objectUrl) URL.revokeObjectURL(objectUrl)
})

loadAudio()
</script>

额外注意事项

  • 始终使用Tauri提供的 join 方法处理路径,避免跨平台路径分隔符问题;
  • 若使用 convertFileSrc,确保你的Tauri版本为v1.0+,不同版本的API参数可能略有差异;
  • 测试前需重启Tauri开发服务,确保配置文件修改生效。

内容的提问来源于stack exchange,提问作者Hangel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:30:12