当前位置: 首页 > 知识库问答 >
问题:

Firebase storage security rules 400错误发布“拒绝许可。无法访问桶…“(在部署时,同时在localhost上工作)

唐啸
2023-03-14
    null
<mat-form-field>
        <!-- Accept only files in the following format: .doc, .docx, .jpg, .jpeg, .pdf, .png, .xls, .xlsx. However, this is easy to bypass, Cloud Storage rules has been set up on the back-end side. -->
        <ngx-mat-file-input
          [accept]="[
            '.doc',
            '.docx',
            '.jpg',
            '.jpeg',
            '.pdf',
            '.png',
            '.xls',
            '.xlsx'
          ]"
          (change)="uploadFile($event)"
          formControlName="fileUploader"
          multiple
          aria-label="Here you can add additional files about your project, which can be helpeful for us."
          placeholder="Additional files"
          title="Additional files"
          type="file"
        >
        </ngx-mat-file-input>
        <mat-icon matSuffix>folder</mat-icon>
        <mat-hint
          >Accepted formats: DOC, DOCX, JPG, JPEG, PDF, PNG, XLS and XLSX,
          maximum files upload size: 20 MB.
        </mat-hint>
        <mat-error
          *ngIf="contactForm.get('fileUploader')!.hasError('maxContentSize')"
        >
          This size is too large,
          <strong
            >maximum acceptable upload size is
            {{
              contactForm.get('fileUploader')?.getError('maxContentSize')
                .maxSize | byteFormat
            }}</strong
          >
          (uploaded size:
          {{
            contactForm.get('fileUploader')?.getError('maxContentSize')
              .actualSize | byteFormat
          }}).
        </mat-error>
      </mat-form-field>

打字(角码)

/**
   * @description Upload additional files to Cloud Firestore and get URL to the files.
   * @param {event} - object of sent files.
   * @returns {void}
   */
  public uploadFile(event: any): void {
    // Iterate through all uploaded files.
    for (let i = 0; i < event.target.files.length; i++) {
      const randomId = Math.random()
        .toString(36)
        .substring(2); // Create random ID, so the same file names can be uploaded to Cloud Firestore.

      const file = event.target.files[i]; // Get each uploaded file.

      // Get file reference.
      const fileRef: AngularFireStorageReference = this.angularFireStorage.ref(
        randomId
      );

      // Create upload task.
      const task: AngularFireUploadTask = this.angularFireStorage.upload(
        randomId,
        file
      );

      // Upload file to Cloud Firestore.
      task
        .snapshotChanges()
        .pipe(
          finalize(() => {
            fileRef.getDownloadURL().subscribe(downloadURL => {
              this.angularFirestore
                .collection('files')
                .add({ downloadURL: downloadURL });
              this.downloadURL.push(downloadURL);
            });
          }),
          catchError((error: any) => {
            return throwError(error);
          })
        )
        .subscribe();
    }
  }

存储规则

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
        allow read; // Required in order to send this as attachment.
      // Allow write files Firebase Storage, only if:
      // 1) File is no more than 20MB
      // 2) Content type is in one of the following formats: .doc, .docx, .jpg, .jpeg, .pdf, .png, .xls, .xlsx.
      allow write: if request.resource.size <= 20 * 1024 * 1024
                   && (request.resource.contentType.matches('application/msword')
                   || request.resource.contentType.matches('application/vnd.openxmlformats-officedocument.wordprocessingml.document')
                   || request.resource.contentType.matches('image/jpg')
                   || request.resource.contentType.matches('image/jpeg')
                   || request.resource.contentType.matches('application/pdf')
                                     || request.resource.contentType.matches('image/png')
                   || request.resource.contentType.matches('application/vnd.ms-excel')
                   || request.resource.contentType.matches('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
    }
  }
}

共有1个答案

施越彬
2023-03-14

根据您得到的消息,您的问题与FireBase中的IAM角色有关。

这里是这些的快速概述。

检查您正在得到的错误消息,并确保您正在部署的实例或您正在使用的服务帐户具有所需的角色,使它们能够执行您想要执行的操作。

 类似资料:
  • 这几天我一直在绞尽脑汁。我正在尝试在AWS Amplify上部署我的react应用程序。当我启动应用程序时,我被正确引导到登录页面(使用Auth0 Universal login),登录后,我通过回调URL被重定向回我的web应用程序。 当我的页面加载时,我收到以下消息 此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。 我不是通过s3 bucket托管web应用程序,而是直接将构建文件

  • 问题内容: $ ./mysqladmin -u root -p ‘ 编辑 ‘ 输入密码: mysqladmin:在“ localhost”处连接到服务器失败错误: “对用户“ root” @“ localhost”的访问被拒绝(使用密码:是) 我怎样才能解决这个问题? 问题答案: 打开并编辑或,具体取决于您的发行版。 添加下 重启MySQL 您现在应该可以使用以下命令登录mysql 跑 设置新密码

  • $./mysqladmin-u root-p“redacted” 输入密码: mysqladmin:连接到“localhost”的服务器失败错误: “拒绝用户”root“@"localhost”的访问(使用密码:YES)“ 我该怎么解决这个?

  • 很抱歉我缺乏知识,但我正在尝试在Tensorflow上运行示例: 我得到了以下错误消息:PermissionDeniedError:删除文件失败: C:\用户\Jeff\AppData\本地\Temp\tmpgpmjek44\graph.pbtxt.tmpe31b9f4677cb426fbaef32dadeaf1a4d;权限被拒绝 我发现错误来自行estimator.train(input_fn=

  • 问题内容: 我创建了两个Java文件:和。 我尝试在命令提示符下使用javac编译代码,如下所示: 我正在访问被拒绝错误: 我在做什么导致此错误? 问题答案: 您似乎正在尝试将源文件放在系统目录中。尝试为您的源文件创建自己的目录(在您自己的主目录下),而不是将它们放在系统路径中。您可能没有写该目录的权限(但我不确定您如何将源文件保存在该目录中)。

  • 我正在使用google drive API,google developer account我启用了此API并获得了clientId、clientSecret等凭据。当我在控制台中运行应用程序时,我正在使用代码应用程序工作正常,但当我在azure服务器中托管代码时,它会出现如下错误 System.Net。HttpListenerException(0x80004005):在System.Net.H