Как загрузить локальные активы в облачной функции GCP? - PullRequest
0 голосов
/ 21 января 2019

Я создаю крошечную облачную функцию GCP в Голанге, которая возвращает сгенерированный файл PNG при вызове его через HTTP.Я развернул свой код с помощью ZIP-Upload в Google Cloud Console.В настоящее время он вызывается правильно, код компилируется и т. Д. Но в моем коде мне нужно загрузить несколько локальных файлов - шрифт и изображение .png.Я упаковал их в ZIP-файл, который я загрузил, и файлы видны в Source-View в GCP.Все файлы (изображения, шрифты и go-файлы) находятся в одном каталоге.

При вызове облачной функции журнал сообщает следующее:

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

Я пытался изменить способ, которым япостроить путь к файлу в го.Я уже использовал /german.png статически, несколько раз пытался построить путь динамически.

Я не уверен на 100%, так ли это, но это мой первый эксперимент с "serverless" иЯ готов сделать это «правильным» способом.

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 Ответ

0 голосов
/ 21 января 2019

Я создал функции 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 / апи

Так что в вашем случае я бы попытался изменить путь на gg.LoadPNG("./english.png")

...