我正在开发的项目取决于在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
库不同的方法?我们正在使用标准的运行时。
答案 0 :(得分:1)
整个请求体被解析,其文件部分的maxMemory字节总数存储在内存中,其余部分存储在临时文件的磁盘上。
服务器尝试将所有文件写入磁盘,因为应用程序将-1
作为maxMemory
传递。使用大于您希望上传的文件大小的值。