微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以通过 golang 中的 http.FileServer 提供存储在 Google Cloud Storage 中的文件吗?

如何解决我可以通过 golang 中的 http.FileServer 提供存储在 Google Cloud Storage 中的文件吗?

我开发了一个在 golang 中运行 web 服务器的小型 web 应用程序。 每个用户都可以登录,查看他们的文档列表(之前上传的)并点击一个项目来查看一个 html 页面,该页面显示了文档的一些字段以及一个带有 src 属性标签

src 属性包含一个 url,如“mydocuments/download/123-456-789.pdf”

在服务器端,我通过 http 处理程序处理 URL(“mydocuments/download/*”)

mymux.HandleFunc(pat.Get("/mydocuments/download/:docname"),DocDownloadHandler)

哪里:

  1. 我检查用户是否有权查看 url 中的文档
  2. 然后我创建了一个文件服务器,显然将 url 重新映射到文件存储在服务器文件系统上的文件夹的真实路径
fileServer := http.StripPrefix("/mydocs/download/",http.FileServer(http.Dir("/the-real-path-to-documents-folder/user-specific-folder/)))

当然还有我提供文件

fileServer.ServeHTTP(w,r)

重要提示:存放文件的目录不是我为网站申请的static-files目录,而是用户上传后所有文件结束的目录。

我的问题 当我尝试将代码转换在 Google Cloud 上运行时,我正在尝试更改代码,以便将文件存储在存储桶中(或者,更好地存储在“子目录”中 -因为它们没有正确存在 - 一个桶)。

如何修改代码,以便通过云存储桶映射可用的真实文档 url? 我还可以使用上面的 http.FileServer 技术吗(如果可以,我应该使用什么代替 http.Dir 来映射存储文档的存储桶“子文件夹”路径)?

我希望我已经足够清楚地解释了我的问题... 对于任何不清楚的地方,我提前道歉......

解决方法

一些选项是:

  1. 允许用户使用签名 URL 直接访问资源。
    编写代码将请求代理到 GCS。
    http.FS 与由 GCS 支持的 fs.FS 一起使用。

可能已经存在 GCS 的 fs.FS,但您可能需要编写一个。

  1. 您可以使用 http.FileSystem,因为它是一个接口,可以随心所欲地实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。