gpt4 book ai didi

javascript - 如何从 Vue 网络应用程序中的 firebase 存储下载文件?

转载 作者:行者123 更新时间:2023-12-04 17:25:40 26 4
gpt4 key购买 nike

情况:您需要通过具有 vue.js 网络应用程序(包含 vuetify)的浏览器将 pdf 文件(或任何文件类型)从 firebase 存储下载到您的计算机。你看过 firebase storage doc ,但不是很清楚。您不确定适合您的 Firebase 存储规则。这是用于前端 - 用户的浏览器。您将如何实现?

最佳答案

这是关于如何通过 vue 网络应用程序将文件从 firebase 存储下载到用户计算机的编译答案。 firebase storage download documentation拥有您的 vue.js 网络应用程序将文件下载到计算机所需的 90%。按照那里的步骤操作。如果您不使用 firebase 身份验证,那么您可能希望将读取权限设置为所有人。默认情况下,只有经过身份验证的用户才能读写。您可以在您的 Firebase 存储规则中这样做:

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if request.auth == null;
allow write: if request.auth != null;
}
}
}

这样任何人都可以查看/下载您的文件。接下来,按照上面发布的指南,您将能够获取文件的 url,然后将其转换为“blob”格式。现在,该指南不会告诉您下一步该怎么做,而是另一个 Stack Overflow answer有解决办法。我在这里把两者结合起来。基本上代码中发生的是:

  1. 您应该从 @click.prevent 事件发射器而不是 @click 调用事件处理函数。
  2. 事件处理函数做几件事。与 firebase 存储文档一样,它获取文件的 url 并通过 XMLHttpRequest() 将其转换为“blob”。
  3. 按照链接的解决方案,您应该创建一个新的 a 元素,然后将其 href 属性分配给“blob”,下载名称并发出 click 事件。之后撤销href属性,以免发生意外。

传统上,我们使用 a 链接来下载文件,但我们可以使用 v-btn,因为我们在事件中创建 a 链接处理程序。我的按钮有一个工具提示和图标。此外,由于 linter,我删除了未使用的变量。


内部 html 模板:

<v-tooltip top>
<template v-slot:activator="{ on, attrs }">
<v-btn
:color="counterThemeColorClass"
fab
ripple
v-bind="attrs"
v-on="on"
@click.prevent="downloadResumePdf"
>
<v-icon
:color="themeColorClass"
x-large
>mdi-file-account-outline</v-icon>
</v-btn>
</template>
<span class="font-weight-bold">download resume</span>
</v-tooltip>

内部脚本:

downloadResumePdf() {
const resumeRef = firebase.storage()
.ref('tenzin_resume.pdf');
resumeRef.getDownloadURL().then((url) => {
// `url` is the download URL
console.log(url);
// This can be downloaded directly:
const xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function () {
const blob = xhr.response;
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'tenzin_resume';
link.click();
URL.revokeObjectURL(link.href);
};
xhr.open('GET', url);
xhr.send();
}).catch((error) => {
// Handle any errors
switch (error.code) {
case 'storage/object-not-found':
// File doesn't exist
break;

case 'storage/unauthorized':
// User doesn't have permission to access the object
break;

case 'storage/canceled':
// User canceled the upload
break;

case 'storage/unknown':
// Unknown error occurred, inspect the server response
break;
default:
break;
}
});
},

关于javascript - 如何从 Vue 网络应用程序中的 firebase 存储下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63590279/

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