【问题标题】:Parse multipart form on Google App Engine在 Google App Engine 上解析多部分表单
【发布时间】:2018-01-04 23:51:54
【问题描述】:

我正在处理的一个项目依赖于托管在 Google App Engine 上的服务从 SendGrid 解析。下面的代码是我们正在做的一个例子:

package sendgrid_failure

import (
    "net/http"
    "fmt"
    "google.golang.org/appengine"
    "google.golang.org/appengine/log"
)

func init() {
    http.HandleFunc("/sendgrid/parse", sendGridHandler)
}

func sendGridHandler(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    err := r.ParseMultipartForm(-1)
    if err != nil {
        log.Errorf(ctx, "Unable to parse form: %v", err)
    }

    fmt.Fprint(w, "Test.")
}

当 SendGrid POST 其多部分表单时,控制台显示类似于以下内容:

2018/01/04 23:44:08 错误:无法解析表单:打开 /tmp/multipart-445139883:App Engine 上不允许写入文件

App Engine 不允许您读取/写入文件,但 Golang 似乎需要它来解析。是否有一个 App Engine 特定的库来解析多部分表单,或者我们应该完全使用与标准 net/http 库不同的方法?我们使用的是标准的 go 运行时。

【问题讨论】:

    标签: google-app-engine go multipart


    【解决方案1】:

    ParseMultipartForm says 的文档:

    整个请求正文被解析,其文件部分的最多 maxMemory 字节存储在内存中,其余部分存储在磁盘中的临时文件中。

    服务器尝试将所有文​​件写入磁盘,因为应用程序将-1 传递为maxMemory。使用大于您希望上传的文件大小的值。

    【讨论】:

    • 非常感谢!我想最后,我应该总是重读文档。 :P
    猜你喜欢
    • 2014-04-11
    • 2011-06-01
    • 2016-12-25
    • 2011-02-03
    • 2010-11-13
    • 2023-03-02
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多