11

问题

使用Go Blobstore API上传文件时,成功路径重定向到错误的appengine 模块。这是对问题的更直观的描述:

  1. 用户登陆模块A的上传页面:http://A.my-appengine-app.com/upload
  2. 用户的浏览器向模块发出请求以进行上传会话:http://A.my-appengine-app.com/upload/session
  3. 模块A定义了一个/upload/session运行以下 Go 代码的处理程序:url, err := blobstore.UploadURL(c, "/upload/success")
  4. 该方法返回一个 URL,类似于:http://A.my-appengine-app.com/_ah/upload/[some long hash]/
  5. 此 URL 被转发回用户的浏览器并插入action<form>.
  6. POST用户向 URL提交多部分请求
  7. 无论处理 URL(一些非用户空间应用程序引擎处理程序),尝试重定向回/upload/success

这就是事情变得奇怪的地方。在开发中,服务器重定向到模块A中的“/upload/success” 。在生产中,服务器重定向到主模块,我们现在可以称之为B。我可以说这是发生了,因为我404在我的 web 控制台中得到了 a 并且日志表明正在向模块B发出请求。我什至甚至明确地将主机名作为成功路径的一部分传递(步骤#3),但没有效果。

当前解决方案(不理想)

看来我唯一的办法是在模块B中定义一个处理程序来像模块A一样处理请求。由于 goapp 架构将所有模块整合在一起,这并不是世界上最糟糕的权衡,但考虑到模块应该是垂直独立的,这在语义上是错误的。如果有人知道如何解决这个问题,我将不胜感激。现在,我将采用上述方法。

4

0 回答 0