google-app-engine - os.Open 在 AppEngine 上使用 Go

标签 google-app-engine go

我最近开始尝试使用 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/

相关文章:

java - 如何使用 java.net API 设置 AppENGine (Java) urlfetch 截止日期

shell - 无法将 shell 命令的输出写入 Go 中的文件

gob 没有按预期解码

go - 为什么共享 int 变量在 go 例程中递增时显示原子行为?

java - GAE 上的 Spring 4.2.1 和 java.util.ResourceBundle$Control 是受限类

java - 使用游标对象化分页

email - 带有Golang的邮件服务器

parallel-processing - Golang : how to verify number of processors on which a Go program is running

mysql - 使用 Sequelize 进行 Cloud SQL 部署时出现 Google App Engine 错误

python - Google App Engine __main__ 模块