【问题标题】:Firebase storage download audio files in React NativeFirebase 存储在 React Native 中下载音频文件
【发布时间】:2021-05-15 08:05:54
【问题描述】:

我正在使用 firebase/storage 来设置音频文件下载/上传。我的 Firestore 存储中已经有音频文件。

通过以下代码,我可以得到特定文件的下载地址:

import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/storage';

static async downloadMedia(mediaRef: string) {
    
    try {
        var storage = firebase.storage();

        var pathReference = storage.ref(mediaRef);
        
        const downloadUrl = await pathReference.getDownloadURL();

        var xhr = new XMLHttpRequest();
        xhr.responseType = 'blob';

        xhr.onload = (event) => {
            var blob = xhr.response;
        };

        xhr.open('GET', downloadUrl);
        
        return downloadUrl;

    } catch (e) {
        switch (e.code) {
            case 'storage/object-not-found':
                console.warn('File does not exist.');
                break;
            case 'storage/unauthorized':
                console.warn('Unauthorized.');
                break;
            case 'storage/canceled':
                console.warn('Upload cancelled.');
                break;
            case 'storage/unknown':
                console.warn('Unknown error.');
                break;
        }
    }
}

但是,我不明白如何使用 firebase 库通过它提供给我的 URL 下载文件本身。

谢谢。

【问题讨论】:

    标签: firebase react-native firebase-storage mp3


    【解决方案1】:

    找到了一个不涉及我下载媒体而是直接使用下载 URL 播放的解决方案。

    使用包'expo-av'。

    希望这对我的人有所帮助!

    export default function AudioPlay({ mediaDownloadUrl } : AudioPlayProps) {
        const [sound, setSound] = React.useState<Audio.Sound | null>(null);
    
        async function playSound() {
    
            if (typeof mediaDownloadUrl !== 'string') return null;
    
            try {
                const { sound } = await Audio.Sound.createAsync(
                    { uri: mediaDownloadUrl }
                );
    
                setSound(sound);
    
                await sound.playAsync();
            } catch (e) {
                console.warn(e);
            }
    
        }
    
        React.useEffect(() => {
            return sound
                ? () => {
                        console.log('Unloading Sound');
                        sound.unloadAsync(); }
                : undefined;
        }, [sound]);
    
    // ....
    

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多