在Google App Engine上解析多部分表单

时间:2018-01-04 23:51:55

标签: google-app-engine go multipart

我正在开发的项目取决于在SendGrid上解析托管在Google App Engine上的服务。以下代码是我们正在做的事情的一个例子:

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错误:无法解析表单:open / tmp / multipart-445139883:App Engine上不允许文件写入

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

1 个答案:

答案 0 :(得分:1)

ParseMultipartForm says的文档:

  

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

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