Я создаю приложение с использованием Reaction-native и expo.Одна особенность приложения позволяет пользователю записывать аудио, а затем загружать его в Firebase Storage.Мне удается успешно записать аудио, а также получить кешированный файл в виде большого двоичного объекта, но при попытке загрузить его в хранилище Firebase происходит сбой с кодом ошибки 400 «Неверный запрос. Не удалось создать объект».Меня сбивает с толку то, что я использую тот же процесс для загрузки изображений, который работает отлично.Почему происходит сбой для аудиофайлов?
Мне удается успешно записать звук, и я извлекаю кэшированный файл (в виде большого двоичного объекта) с помощью XMLHttpRequest.Получающийся в результате BLOB-объект, который выводится при входе в консоль, выглядит примерно так:
Blob {
"_data": Object {
"blobId": "lengthy blob id",
"name": "recording-XXXXXX.m4a",
"offset": 0,
"size": 371097,
"type": "audio/x-m4a",
},
}
Когда я пытаюсь загрузить в Firebase Storage с помощью ref.put (blob), он возвращает ошибку 400: «Bad RequestНе удалось создать объект ".Я также попытался предоставить contentType как часть метаданных, чтобы увидеть, будет ли это иметь значение, но безрезультатно.
Вот как я получаю свой файл:
const blob = await new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = () => {
resolve(xhr.response);
};
xhr.onerror = (e) => {
reject(new TypeError('Network request failed'));
};
xhr.responseType = 'blob';
xhr.open('GET', uri, true);
xhr.send(null);
});
Для загрузкиBLOB-объект в хранилище Firebase Я делаю следующее:
const clientuid = 123;
const siteid = 'ABC';
const audioName = `${Date.now}.m4a`;
this.setState({ uploading: true });
const ref = firebase.storage().ref().child(`audio/${clientuid}/${siteid}/${audioName}`);
ref.put(blob)
.then(async (snapshot) => {
const fullUrl = await snapshot.ref.getDownloadURL();
// Upload the Url to Firebase realtime database...
Alert.alert('Upload Successful');
.catch((error) => {
console.log(error.serverResponse);
Alert.alert('Failed to create object!');
})
.finally(() => {
blob.close()
this.setState({ uploading: false });
});
Загрузка завершается неудачно со следующей ошибкой.serverResponse:
{
"error": {
"code": 400,
"message": "Bad Request. Could not create object",
"status": "CREATE_OBJECT"
}
}