问题
使用Go Blobstore API上传文件时,成功路径重定向到错误的appengine 模块。这是对问题的更直观的描述:
- 用户登陆模块A的上传页面:
http://A.my-appengine-app.com/upload
- 用户的浏览器向模块发出请求以进行上传会话:
http://A.my-appengine-app.com/upload/session
- 模块A定义了一个
/upload/session
运行以下 Go 代码的处理程序:url, err := blobstore.UploadURL(c, "/upload/success")
- 该方法返回一个 URL,类似于:
http://A.my-appengine-app.com/_ah/upload/[some long hash]/
- 此 URL 被转发回用户的浏览器并插入
action
到<form>
. POST
用户向 URL提交多部分请求- 无论处理 URL(一些非用户空间应用程序引擎处理程序),尝试重定向回
/upload/success
这就是事情变得奇怪的地方。在开发中,服务器重定向到模块A中的“/upload/success” 。在生产中,服务器重定向到主模块,我们现在可以称之为B。我可以说这是发生了,因为我404
在我的 web 控制台中得到了 a 并且日志表明正在向模块B发出请求。我什至甚至明确地将主机名作为成功路径的一部分传递(步骤#3),但没有效果。
当前解决方案(不理想)
看来我唯一的办法是在模块B中定义一个处理程序来像模块A一样处理请求。由于 goapp 架构将所有模块整合在一起,这并不是世界上最糟糕的权衡,但考虑到模块应该是垂直独立的,这在语义上是错误的。如果有人知道如何解决这个问题,我将不胜感激。现在,我将采用上述方法。