【问题标题】:os.Open on AppEngine with Goos.用 Go 在 AppEngine 上打开
【发布时间】:2015-08-01 13:49:38
【问题描述】:

我最近开始使用 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 并且有效,所以我不知道我在做什么我在这里失踪了。

【问题讨论】:

  • 路径看起来错误 - 尝试删除前导 /。

标签: google-app-engine go


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多