Repository navigation
Expand file tree
/
Copy pathstorage.ts
More file actions
52 lines (44 loc) · 2.05 KB
/
Copy pathstorage.ts
File metadata and controls
52 lines (44 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { Injectable, Inject, Optional, InjectionToken, NgZone, PLATFORM_ID } from '@angular/core';
import { createStorageRef, AngularFireStorageReference } from './ref';
import { createUploadTask, AngularFireUploadTask } from './task';
import { Observable } from 'rxjs';
import { FirebaseStorage, TypicalDependencyInjection, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, FirebaseZoneScheduler, _firebaseAppFactory } from '@angular/fire';
import { UploadMetadata } from './interfaces';
export const StorageBucket = new InjectionToken<string>('angularfire2.storageBucket');
// TODO clean up anys
export const getInstance =
(config: TypicalDependencyInjection & { bucket?: string }) =>
new AngularFireStorage(config.options,( <any>config).appName || (<any>config).appConfig, config.bucket || null, config.platformId, config.zone);
/**
* AngularFireStorage Service
*
* This service is the main entry point for this feature module. It provides
* an API for uploading and downloading binary files from Cloud Storage for
* Firebase.
*/
@Injectable()
export class AngularFireStorage {
public readonly storage: FirebaseStorage;
public readonly scheduler: FirebaseZoneScheduler;
constructor(
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|null|undefined,
@Optional() @Inject(StorageBucket) storageBucket:string|null,
@Inject(PLATFORM_ID) platformId: Object,
zone: NgZone
) {
this.scheduler = new FirebaseZoneScheduler(zone, platformId);
this.storage = zone.runOutsideAngular(() => {
const app = _firebaseAppFactory(options, nameOrConfig);
return app.storage(storageBucket || undefined);
});
}
ref(path: string) {
return createStorageRef(this.storage.ref(path), this.scheduler);
}
upload(path: string, data: any, metadata?: UploadMetadata) {
const storageRef = this.storage.ref(path);
const ref = createStorageRef(storageRef, this.scheduler);
return ref.put(data, metadata);
}
}