ProtectedAudio.tsx 587 B

12345678910111213
  1. import { useEffect, useState } from 'react'
  2. import { privateImageUrl } from '../api'
  3. export function ProtectedAudio({ src }: { src: string }) {
  4. const [url, setUrl] = useState('')
  5. useEffect(() => {
  6. let alive = true
  7. let created = ''
  8. privateImageUrl(src).then(value => { created = value; if (alive) setUrl(value); else URL.revokeObjectURL(value) }).catch(() => setUrl(''))
  9. return () => { alive = false; if (created) URL.revokeObjectURL(created) }
  10. }, [src])
  11. return url ? <audio controls preload="none" src={url}>您的浏览器不支持音频播放</audio> : null
  12. }