使用 React Native Expo 将 mp3 上传到 Firebase 存储

Uploading an mp3 to Firebase Storage with React Native Expo

我正在尝试使用 expo 和 React Native 将 mp3 上传到 firebase 存储。到目前为止,我已经将该文件放入 firebase 存储中,但它只有 9 个字节大,所以我做错了什么。我尝试使用 blob 进行此操作,如下所示,但没有成功。

这是 firebase 存储文件夹的屏幕截图,其中显示了已上传的文件,但没有显示该文件的数据:

非常感谢任何帮助,我觉得我错过了实际上传数据和文件的步骤。

export default function SongPicker() {
  const [song, setSong] = useState(null);

  //Get current user through authentication
  const user = auth.currentUser;

  const pickDocument = async () => {
    let result = await DocumentPicker.getDocumentAsync({});
    // Fetch the photo with it's local URI
    const response = fetch(result.uri);
    alert(result.uri);
    console.log(result);

    const file = new Blob(
      [response.value], {
        type: 'audio/mpeg'
      });
    console.log('do we see this?');

    try {
      //Create the file reference
      const storage = getStorage();
      const storageRef = ref(storage, `songs/${user.uid}/${result.name}`);

      // Upload Blob file to Firebase
      const snapshot = uploadBytes(storageRef, file, 'blob').then((snapshot) => {
        console.log('Uploaded a song to firebase storage!');
      });

      setSong(result.uri);
    } catch (error) {
      console.log(error);
    }

  }

fetch() returns 一个 Promise,因此您也应该为此添加一个 await。

const response = await fetch(result.uri);

然后尝试在 Response 上使用 blob() 方法:

const file = await response.blob()

uploadBytes 中的第三个参数应该是上传元数据对象,但您可以在此处跳过:

const snapshot = await uploadBytes(storageRef, file).