首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过express中间件从google云存储服务静态文件。

通过express中间件从google云存储服务静态文件。
EN

Stack Overflow用户
提问于 2016-11-28 16:58:25
回答 4查看 2.9K关注 0票数 3

我有一个在google AppEngine上托管的快速应用程序,它使用快速静态中间件。我希望将静态文件存储在google-cloud-storage上,并且能够在不做太多修改的情况下从常规文件系统切换到google-cloud-storage

我正在考虑编写一个中间件:

有没有更容易/更干净的方法来做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2019-04-17 09:39:10

我需要同样的条件,并看到了google云节点上使用的示例,或者在另一个问题中看到了示例

将文件内容的读流输送到您的响应。设置文件名和内容类型。

代码语言:javascript
复制
// Add headers to describe file
let headers = {
   'Content-disposition': 'attachment; filename="' + 'giraffe.jpg' + '"',
   'Content-Type': 'image/png'
};

// Streams are supported for reading files.
let remoteReadStream = bucket.file('giraffe.jpg').createReadStream();

// Set the response code & headers and pipe content to response
res.status(200).set(headers);
remoteReadStream.pipe(res);
票数 3
EN

Stack Overflow用户

发布于 2019-04-22 07:08:30

我使用http代理中间件完成了这项工作。本质上,由于GCS文件可以通过http协议访问,这就是我们所需要的。

理想情况下,这些文件可以直接在GCS之外服务,方法是公开存储桶,并将其URL设置为https://storage.googleapis.com/<bucket-name>/file。但我的要求是,文件需要从与我的应用程序相同的域服务,但这些文件并不是应用程序本身的一部分(它们是单独生成的)。所以,我不得不把它作为代理来实现。

代码语言:javascript
复制
import proxy from 'http-proxy-middleware';
...

app.use('/public', proxy({
  target: `https://storage.googleapis.com/${process.env.GOOGLE_CLOUD_PROJECT}.appspot.com`,
  changeOrigin: true,
}));

请注意,基于项目ID的桶是由GAE自动创建的,但需要授予它公共访问权限。这可以通过

代码语言:javascript
复制
gsutil defacl set public-read gs://${GOOGLE_CLOUD_PROJECT}.appspot.com

在设置代理之后,对https://example.com/public/*的所有请求都将从桶<GOOGLE_CLOUD_PROJECT>.appspot.com/public/*中处理。

票数 3
EN

Stack Overflow用户

发布于 2016-12-04 00:44:27

您可以使用配置GCS桶以承载静态网站,然后使用现有的快速中间件将请求代理到该桶中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40849631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档