为了账号安全,请及时绑定邮箱和手机立即绑定

os.Open 在 AppEngine 上使用 Go

os.Open 在 AppEngine 上使用 Go

Go
人到中年有点甜 2021-10-25 19:59:09
我最近开始使用 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-telegramversion: 1runtime: goapi_version: go1handlers:- url: /.*  script: _go_app这是带有我的应用程序 ID 的默认 app.yaml。我试过通过 app.yaml 设置静态目录,但这也不起作用,我读过 AppEngine 在这种情况下将您的静态文件与代码分开存储。我对 Go 也很陌生,所以我可能做错了,可能不是 AppEngine 问题,但我过去使用 os.Open 没有 AppEngine 并且有效,所以我不知道我错过了什么这里。
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

它应该没有斜线工作。文件路径相对于您的项目根目录(您所在的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

它在本地和应用引擎上运行。


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信