我最近开始玩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的问题但我过去使用过os.Open而没有AppEngine而且这样做有效,所以我没有&# 39;不知道我在这里失踪了什么。
答案 0 :(得分:2)
它应该没有斜线。文件路径是相对于项目根目录的(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
它在本地和应用引擎上运行。