如何使用Google云端存储中的TypeScript在存储桶中公开查看文件?

时间:2018-02-08 07:53:46

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

我想知道如何将此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'类型的值不可调用。你的意思是   包括'新'? class Storage.Bucket

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

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

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

  

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

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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()

答案 1 :(得分:0)

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

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