我最近开始尝试使用 AppEngine,但在打开文件时遇到问题。这是我正在使用的代码:
if _, err := os.Open("/pizza.webp"); err != nil {
printError(err.Error())
}
这给了我错误:open/pizza.webp: operation not permitted
我试过使用 .png 来代替,结果相同。我也尝试过不使用斜线和在斜线前加一个点,两者都导致错误 no such file or directory
所以我猜我的路径是正确的,但出于某种原因我不知道没有访问它的权限,也许我需要在 app.yaml 中写一些东西?现在 app.yaml 看起来像这样:
application: pizzarobot-telegram
version: 1
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
这是我的应用程序 ID 的默认 app.yaml。我试过通过 app.yaml 设置一个静态目录,但这也没有用,我读到 AppEngine 在那种情况下将您的静态文件与代码分开存储。
我对 Go 也很陌生,所以我可能做错了,可能不是 AppEngine 的问题,但我过去在没有 AppEngine 的情况下使用过 os.Open 并且有效,所以我不知道我在做什么这里不见了。
最佳答案
它应该没有斜线。文件路径相对于您的项目根目录(您的 app.yaml
所在的位置)。
我刚刚尝试了 3 个文件:
main.go
app.yaml
pizza.txt
main.go
:
package main
import (
"io"
"net/http"
"os"
)
func init() {
http.HandleFunc("/pizza.txt", func(res http.ResponseWriter, req *http.Request) {
f, err := os.Open("pizza.txt")
if err != nil {
http.Error(res, err.Error(), 500)
return
}
defer f.Close()
io.Copy(res, f)
})
}
pizza.txt
:
Totally Works!
app.yaml
:
application: astute-curve-100822
version: 1
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
它在本地和 App Engine 上运行。
关于google-app-engine - os.Open 在 AppEngine 上使用 Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31762567/