gpt4 book ai didi

javascript - 如何获取firebase文件存储的下载地址

转载 作者:行者123 更新时间:2023-11-30 14:25:07 26 4
gpt4 key购买 nike

我无法理解获取下载 URl 的过程,有人可以很好地分解给我吗?所以我在这里有这个上传组件:

import { Component, OnInit } from '@angular/core';
import { AngularFireStorage, AngularFireUploadTask } from
'angularfire2/storage';
import { AngularFirestore } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import { tap, filter, switchMap } from 'rxjs/operators';
import { storage } from 'firebase/storage';


@Component({
selector: 'file-upload',
templateUrl: './file-upload.component.html',
styleUrls: ['./file-upload.component.scss']
})
export class FileUploadComponent {

// Main task
task: AngularFireUploadTask;

// Progress monitoring
percentage: Observable<number>;

snapshot: Observable<any>;

// Download URL
downloadURL: Observable<string>;

// State for dropzone CSS toggling
isHovering: boolean;

constructor(private storage: AngularFireStorage, private db: AngularFirestore) { }

toggleHover(event: boolean) {
this.isHovering = event;
}

startUpload(event: FileList) {
// The File object
const file = event.item(0)

// Client-side validation example
if (file.type.split('/')[0] !== 'image') {
console.error('unsupported file type :( ')
return;
}

// The storage path
const path = `test/${new Date().getTime()}_${file.name}`;

// Totally optional metadata
const customMetadata = { app: 'My AngularFire-powered PWA!' };

// The main task
this.task = this.storage.upload(path, file, { customMetadata })

// Progress monitoring
this.percentage = this.task.percentageChanges();
this.snapshot = this.task.snapshotChanges().pipe(
tap(snap => {
console.log(snap)
if (snap.bytesTransferred === snap.totalBytes) {
// Update firestore on completion
this.db.collection('photos').add( { path, size: snap.totalBytes })
}
})
)


// The file's download URL
this.downloadURL = this.task.downloadURL();
console.log(this.downloadURL)

const ref = this.storage.ref(path);
this.task = ref.put(file, {customMetadata});

this.downloadURL = this.task.snapshotChanges().pipe(
filter(snap => snap.state === storage.TaskState.SUCCESS),
switchMap(() => ref.getDownloadURL())
)
console.log(this.downloadURL);
}

// Determines if the upload task is active
isActive(snapshot) {
return snapshot.state === 'running' && snapshot.bytesTransferred < snapshot.totalBytes
}}

我尝试控制获取下载 URL 的假定方式,但它是空的,我已经看到一些其他方法来完成它,但似乎无法正确完成。即使使用 snapshot.downloadURL,下载 URL 也始终为空。以下是 包.json:

{
"name": "storage-app",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^6.0.3",
"@angular/common": "^6.0.3",
"@angular/compiler": "^6.0.3",
"@angular/core": "^6.0.3",
"@angular/forms": "^6.0.3",
"@angular/http": "^6.0.3",
"@angular/platform-browser": "^6.0.3",
"@angular/platform-browser-dynamic": "^6.0.3",
"@angular/platform-server": "^6.0.3",
"@angular/router": "^6.0.3",
"angularfire2": "5.0.0-rc.6",
"core-js": "^2.5.4",
"firebase": "4.12.1",
"rxjs": "^6.0.0",
"rxjs-compat": "^6.2.2",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular/cli": "^6.0.8",
"@angular/compiler-cli": "^6.0.3",
"@angular/language-service": "^6.0.3",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "^4.0.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.7.2",
"@angular-devkit/build-angular": "~0.6.8"
}
}

提前致谢

最佳答案

您可以从存储 ref 中检索下载 url:

loading = false;

uploadFile(event) {

this.loading = true;

const file = event.target.files[0];
// give it a random file name
const path = Math.random().toString(36).substring(7);
const storageRef = this.storage.ref(path);
const task = this.storage.upload(path, file);

return from(task).pipe(
switchMap(() => storageRef.getDownloadURL()),
tap(url => {
// use url here, e.g. assign it to a model
}),
mergeMap(() => {
// e.g. make api call, e.g. save the model
}),
finalize(() => this.loading = false)
).subscribe(() => {
// success
}, error => {
// failure
});
}

我正在使用 angularfire 5.0.0-rc.11

关于javascript - 如何获取firebase文件存储的下载地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com