使用 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).
我正在尝试使用 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).