我有一个在google AppEngine上托管的快速应用程序,它使用快速静态中间件。我希望将静态文件存储在google-cloud-storage上,并且能够在不做太多修改的情况下从常规文件系统切换到google-cloud-storage。
我正在考虑编写一个中间件:
google-cloud-storage urls)。有没有更容易/更干净的方法来做到这一点?
发布于 2019-04-17 09:39:10
我需要同样的条件,并看到了google云节点上使用的示例,或者在另一个问题中看到了示例。
将文件内容的读流输送到您的响应。设置文件名和内容类型。
// 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);发布于 2019-04-22 07:08:30
我使用http代理中间件完成了这项工作。本质上,由于GCS文件可以通过http协议访问,这就是我们所需要的。
理想情况下,这些文件可以直接在GCS之外服务,方法是公开存储桶,并将其URL设置为https://storage.googleapis.com/<bucket-name>/file。但我的要求是,文件需要从与我的应用程序相同的域服务,但这些文件并不是应用程序本身的一部分(它们是单独生成的)。所以,我不得不把它作为代理来实现。
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自动创建的,但需要授予它公共访问权限。这可以通过
gsutil defacl set public-read gs://${GOOGLE_CLOUD_PROJECT}.appspot.com在设置代理之后,对https://example.com/public/*的所有请求都将从桶<GOOGLE_CLOUD_PROJECT>.appspot.com/public/*中处理。
发布于 2016-12-04 00:44:27
您可以使用配置GCS桶以承载静态网站,然后使用现有的快速中间件将请求代理到该桶中。
https://stackoverflow.com/questions/40849631
复制相似问题