Firebase 存储
Firebase 存储 是 Firebase 的云存储服务。它允许您存储和提供用户生成的内容,例如图像、音频、视频和其他文件。虽然大多数 API 可以像您通常使用 Firebase 一样使用,但 VueFire 公开了几个可组合函数,以便更好地与 Vue 集成,这些函数不仅让您访问响应式变量,还让您访问一些操作,例如 upload()
,以便在保持响应式变量更新的同时更新文件。
安装
您不需要安装任何特定内容来使用 Firebase 存储与 VueFire。只需从 vuefire
中导入您需要的不同可组合函数,您就可以开始使用了。
您可以使用可组合函数 useFirebaseStorage()
从任何组件中访问 Firebase 存储。
上传文件
您可以使用 useStorageFile()
可组合函数上传文件并监控上传进度。这还公开了文件上传后的 URL 及其元数据,让我们从一个完整的表单上传示例开始
vue
<script setup lang="ts">
// See https://vueuse.org.cn/core/useFileDialog
import { useFileDialog } from '@vueuse/core'
import { ref as storageRef } from 'firebase/storage'
import { useFirebaseStorage, useStorageFile } from 'vuefire'
const storage = useFirebaseStorage()
const mountainFileRef = storageRef(storage, 'images/mountains.jpg')
const {
url,
// gives you a percentage between 0 and 1 of the upload progress
uploadProgress,
uploadError,
// firebase upload task
uploadTask,
upload,
} = useStorageFile(mountainFileRef)
function uploadPicture() {
const data = files.value?.item(0)
if (data) {
upload(data)
}
}
const filename = ref<string>()
const { files, open, reset } = useFileDialog()
</script>
<template>
<form @submit.prevent="uploadPicture">
<!-- disable the form while uploading -->
<fieldset :disabled="!!uploadTask">
<button
type="button"
@click="open({ accept: 'image/*', multiple: false })"
>
<template v-if="files?.length === 1">
Selected file: {{ files.item(0)!.name }} (Click to select another)
</template>
<template v-else> Select one picture </template>
</button>
<br />
<button>Upload</button>
</fieldset>
</form>
</template>
上传图片后,您可以使用 url
响应式变量。例如,如果是图像,您可以显示它
模板
<img v-if="url" :src="url" />
下载文件
VueFire 还公开了一个较小的可组合函数,它只检索文件的 URL。如果您不需要上传文件,而只需要显示它,这很有用
vue
<script setup lang="ts">
import { useFileDialog } from '@vueuse/core'
import { ref as storageRef } from 'firebase/storage'
import { useFirebaseStorage, useStorageFile } from 'vuefire'
const storage = useFirebaseStorage()
const mountainFileRef = storageRef(storage, 'images/mountains.jpg')
const {
url,
// refresh the url if the file changes
refresh,
} = useStorageFileUrl(mountainFileRef)
</script>
文件元数据
与访问文件 URL 的方式相同,您也可以访问文件元数据。您还可以使用 update()
函数更新元数据并保持响应式变量更新
vue
<script setup lang="ts">
import { useFileDialog } from '@vueuse/core'
import { ref as storageRef } from 'firebase/storage'
import { useFirebaseStorage, useStorageFile } from 'vuefire'
const storage = useFirebaseStorage()
const mountainFileRef = storageRef(storage, 'images/mountains.jpg')
const {
metadata,
// manually refresh the metadata
refresh,
// update metadata
update,
} = useStorageFileMetadata(mountainFileRef)
</script>
请注意,元数据也可以在 useStorageFile()
可组合函数中访问。