代码之家  ›  专栏  ›  技术社区  ›  fgreinus

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

  •  1
  • fgreinus  · 技术社区  · 6 年前

    我在Golang中构建了一个很小的gcp云函数,它在通过HTTP调用时返回一个生成的png文件。我在谷歌云控制台中通过zip上传部署了我的代码。 目前它被正确调用,代码被编译等等,但是在我的代码中,我必须加载几个本地文件——一个字体和一个.png图像。 我将这些文件打包到我上传的zip中,这些文件在gcp的源代码视图中可见。所有文件(图像、字体和Go文件)都在同一目录中。

    当调用cloud函数时,日志显示以下内容:

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

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

    我不能百分之百地确定这是不是该走的路,但这是我第一次尝试“无服务器”,我愿意以“正确”的方式完成它。

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

    目前在我做的任何尝试中都找不到该文件。也许图像被“部署”到的路径与我尝试的路径不同-我在文档中没有找到任何关于这一点的注释。 很明显,我希望它能装好。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alex Pliutau    6 年前

    我创建了具有以下结构的HTTP函数:

    api
    |--test.txt
    |--api.go
    

    并编写了简单的文件内容回复功能:

    package api
    
    import (
        "io/ioutil"
        "net/http"
    )
    
    // FileTest func
    func 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)
    }
    

    它返回文件内容,没有任何问题。 https://us-central1-clickshield24m.cloudfunctions.net/api

    所以在你的情况下,我会尝试将路径改为 gg.LoadPNG("./english.png")