【问题标题】:How to make a file publicly viewable inside a bucket using TypeScript in Google Cloud Storage?如何在 Google Cloud Storage 中使用 TypeScript 使文件在存储桶中公开可见?
【发布时间】:2018-07-18 17:10:26
【问题描述】:

我想知道如何将此 Javascript 代码更改为 TypeScript:

var storage = require('@google-cloud/storage')();
var myBucket = storage.bucket('my-bucket');

var file = myBucket.file('my-file');

file.makePublic(function(err, apiResponse) {});

我一直在尝试这样改变它:

import * as storage from '@google-cloud/storage';
const myBucket = storage.Bucket('my-bucket');

const file = myBucket.file('my-file');

file.makePublic(function(err, apiResponse) {});

但是,Visual Studio Code 是这一行的基础(粗体):

const myBucket = storage.Bucket('my-bucket');

如果我将鼠标放在带下划线的线上,我会收到以下消息:

[ts] 'typeof Bucket' 类型的值不可调用。你的意思是 包括“新”?类 Storage.Bucket

所以,我想我必须使用关键字 new 来实例化该类,但该行仍然由 Visual Studio Code 加下划线(粗体):

const myBucket = new storage.Bucket('my-bucket');

这次错误信息发生了变化:

[ts] 期望 2 个参数,但得到 1 个。构造函数 Storage.Bucket(storage: storage.Storage, name: string): storage.Bucket

根据错误,我需要使用两个参数。一种存储类型和一种字符串类型。我已经有了第二个(字符串类型)。我不确定如何创建存储。

如何创建第一个参数(存储类型)?

如果我们看到 Javascript 示例,它只要求第二个参数(字符串类型)。 Javascript 代码以某种方式推断或具有存储类型的默认值。是否可以在相同代码的 TypeScript 版本中做同样的事情?

感谢您的帮助。

【问题讨论】:

    标签: typescript firebase google-cloud-storage firebase-storage google-cloud-functions


    【解决方案1】:

    你必须从谷歌云存储中获取公共网址

    github 中的明确指令 => 只需将 import 转换为 typescript import

    https://github.com/GoogleCloudPlatform/nodejs-getting-started/blob/master/3-binary-data/lib/images.js

    import * as Storage from '@google-cloud/storage'
    import * as config from '../config';
    
    const CLOUD_BUCKET = config.get('CLOUD_BUCKET');
    
    const storage = Storage({
      projectId: config.get('GCLOUD_PROJECT')
    });
    const bucket = storage.bucket(CLOUD_BUCKET);
    function getPublicUrl (filename) {
      return `https://storage.googleapis.com/${CLOUD_BUCKET}/${filename}`;
    }
    
    file.makePublic().then(() => {
      req.file.cloudStoragePublicUrl = getPublicUrl(gcsname);
      next();
    });
    

    https://cloud.google.com/nodejs/getting-started/using-cloud-storage

    【讨论】:

      【解决方案2】:

      storage 是这里的一个函数:

      import * as storage from '@google-cloud/storage'
      const myBucket = storage().bucket('my-bucket')
      

      您可能需要将参数传递给storage() 以使其按照您想要的方式运行。请参阅API doc

      如果您使用 Firebase 并希望访问您的项目默认存储空间,您还可以通过 Firebase Admin SDK 获取存储桶实例:

      import * as admin from 'firebase-admin'
      const myBucket = admin.storage().bucket()
      

      【讨论】:

      • 您好,Doug,感谢您的帮助。我开始使用 Firebase Admin SDK。现在一切正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2021-03-28
      相关资源
      最近更新 更多