如何在 GCP 云功能中加载本地资产?

我正在 Golang 中构建一个微型 GCP 云函数,它在通过 HTTP 调用时返回生成的 PNG 文件。我在 Google Cloud Console 中通过 ZIP-Upload 部署了我的代码。目前它被正确调用并且代码被编译等。但是在我的代码中我必须加载几个本地文件 - 一个字体和一个 .png 图像。我将它们捆绑在我上传的 ZIP 中,这些文件在 GCP 的源视图中可见。所有文件(图像、字体和 go 文件)都在同一目录中。

调用云函数时,日志说明如下:

2019/01/21 14:59:31 open /english.png: no such file or directory

我试图改变我构建文件路径的方式。我已经静态地使用了 /german.png,多次尝试动态构建路径。

我不是 100% 确定这是否是要走的路,但这是我对“无服务器”的第一次实验,我愿意以“正确”的方式完成它。

import "github.com/fogleman/gg"



func main() {

    ex, err := os.Executable()

    if err != nil {

        panic(err)

    }

    executableDir := filepath.Dir(ex)


    img, err :=gg.LoadPNG(path.Join(executableDir, "./english.png"))

    if err != nil {

        log.Fatal(err)

    }

}

目前我所做的任何尝试都找不到该文件。也许图像“部署”到的路径与我尝试过的路径不同——我没有在文档中找到任何关于此的注释。我显然希望它能正确加载。


江户川乱折腾
浏览 105回答 3
3回答

12345678_0001

根据文档,对于 Go 1.13 ,截至今天(2020 年 7 月),源代码位于目录中./serverless_function_source_code。一个很好的参考是buildpack。

桃花长相依

我创建了具有以下结构的 http 函数:api|--test.txt|--api.go并编写了简单的函数来回复文件内容:package apiimport (    "io/ioutil"    "net/http")// FileTest funcfunc FileTest(w http.ResponseWriter, r *http.Request) {    content, err := ioutil.ReadFile("./test.txt")    if err != nil {        w.WriteHeader(http.StatusInternalServerError)        w.Write([]byte(err.Error()))        return    }    w.Write(content)}它返回文件内容没有任何问题。因此,在您的情况下,我会尝试将路径更改为gg.LoadPNG("./english.png")

紫衣仙女

./serverless_function_source_code将 go113 运行时与 vendoring 一起使用对我不起作用。我想在供应商目录中找到一个文件。我的文件结构是:myfn|- main.go|- go.mod|- .gcloudignore我的部署步骤是:cd myfngo mod vendorgcloud functions deploy MyFunction --runtime go113 --set-env-vars "PATH_FILES=./src/myfn/vendor/static"我通过部署一个函数发现了这一点,该函数列出了一定深度的所有文件,开始时"."没有看到serverless_function_source_code目录。但是有src/myfn。
打开App,查看更多内容
随时随地看视频慕课网APP