Автор оригинала: Aaron Saunders.
У всех есть один
FireBase Realtime, облако огненная огня и хранение
Простая демонстрация загрузки файла в хранение Firebase из приложения Ionic Framework. Мы не загружаем строку Base64, мы загружаем BLOB в хранилище.
Хранение отличается от базы данных в реальном времени и новее FireBase Cloud Firestore.
FireBase предлагает два облачных, доступных клиента, доступные клиентские базы данных, которые поддерживают синхронизацию данных в реальном времени:
База данных в реальном времени Оригинальная база данных Firebase. Это эффективное решение для мобильных приложений для мобильных приложений, которые требуют синхронизации состояний в реальном времени.
Облако Firestore Новая флагманская база данных Firebase для разработки мобильного приложения. Он улучшает успехи базы данных Realtime с новой, более интуитивной моделью данных. Облако FireStore также имеет более богатые, быстрее запросы и масштабы лучше, чем база данных Realtime.
Выберите базу данных: облачный огневой или база данных в реальном времени | Firebase Если вам удобно с продуктом в бета-версии, используйте Cloud Firestore для ваших новых проектов. Облако Firestore предлагает … _firebase.google.com
Загрузить файл по книгам
Процесс для загрузки файла довольно проходит вперед и объясняется намного лучше в документации Firebase; Там нет волшебных вовлеченных.
Смотрите код:
Aaronksaunders/Ionic4-Firebase-Storage _File Загрузить из приложения Ionic V4 в хранилище облака Firebase – Aaronksaunders/Ionic4-firebase-storage_github.com
uploadToFirebase(_imageBlobInfo) { console.log("uploadToFirebase"); return new Promise((resolve, reject) => { let fileRef = firebase.storage() .ref("images/" + _imageBlobInfo.fileName); let uploadTask = fileRef.put(_imageBlobInfo.imgBlob); uploadTask.on( "state_changed", (_snap: any) => { console.log( "progess " + (_snap.bytesTransferred / _snap.totalBytes) * 100 ); }, _error => { console.log(_error); reject(_error); }, () => { // completion... resolve(uploadTask.snapshot); } ); }); }
Загрузить файлы в Интернете | Firebase _Note: Измените ваши правила безопасности FireBase для хранения облачного хранилища, чтобы обеспечить неавтоматический доступ. Поскольку Google по умолчанию … _firebase.google.com
Магия преобразования изображения из камеры в Blob для загрузки
Этот код камеры для использования плагина Ionic-Nature Camera скопирован непосредственно из Ионическая ночная документация
const options: CameraOptions = { quality: 80, destinationType: this.camera.DestinationType.FILE_URI, encodingType: this.camera.EncodingType.JPEG, mediaType: this.camera.MediaType.PICTURE }; let cameraInfo = await this.camera.getPicture(options);
Обязательно включите Cordova-файл плагин
и Cordova-камера плагин
Отказ File-Plugin имеет решающее значение для преобразования пути в файл правильно, чтобы он мог быть преобразован в BLOB для загрузки
// FILE STUFF makeFileIntoBlob(_imagePath) { // INSTALL PLUGIN - cordova plugin add cordova-plugin-file return new Promise((resolve, reject) => { let fileName = ""; this.file .resolveLocalFilesystemUrl(_imagePath) .then(fileEntry => { let { name, nativeURL } = fileEntry; // get the path.. let path = nativeURL .substring(0, nativeURL.lastIndexOf("/")); fileName = name; // we are provided the name, so now read the file // into a buffer return this.file.readAsArrayBuffer(path, name); }) .then(buffer => { // get the buffer and make a blob to be saved let imgBlob = new Blob([buffer], { type: "image/jpeg" }); // pass back blob and the name of the file for saving // into fire base resolve({ fileName, imgBlob }); }) .catch(e => reject(e)); }); }
Вещи, чтобы заметить в коде
Используйте бета-версии @ Ionic/родной
Модули, и вам нужно убедиться, что вы используете путь « /NGX
» при импорте библиотек.
"@ionic-native/camera": "^5.0.0-beta.15", "@ionic-native/core": "^5.0.0-beta.17", "@ionic-native/file": "5.0.0-beta.15", "@ionic-native/splash-screen": "5.0.0-beta.15", "@ionic-native/status-bar": "5.0.0-beta.15", // notice the path for the import ends in ngx import { Camera, CameraOptions } from "@ionic-native/camera/ngx"; import { File } from "@ionic-native/file/ngx";
Вы должны сделать то же самое, когда вы импортируете модуль в app.module.ts.
import { Camera } from '@ionic-native/camera/ngx'; import { File } from '@ionic-native/file/ngx'; @NgModule({ declarations: [AppComponent], entryComponents: [], imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], providers: [ File, Camera, StatusBar, SplashScreen, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy } ], bootstrap: [AppComponent] }) export class AppModule {}
Полный исходный код к примеру:
https://github.com/aaronksaunders/ionic4-firebase-storage