我正在尝试将文件上传到 java appengine 中的 blobstore。在上传文件的 POST 请求中(在我创建了上传 URL 之后),我有几个额外的 post 参数。当我的 servlet 链运行时,我的过滤器无法访问这些参数(参数映射为空),但上传完成回调可以。
如何从 HTTP 过滤器访问这些 post 参数?
我正在尝试将文件上传到 java appengine 中的 blobstore。在上传文件的 POST 请求中(在我创建了上传 URL 之后),我有几个额外的 post 参数。当我的 servlet 链运行时,我的过滤器无法访问这些参数(参数映射为空),但上传完成回调可以。
如何从 HTTP 过滤器访问这些 post 参数?
request.getParameter("paramName");
和request.getInputStream()
上传的文件。
如果我理解正确,您想对通过创建的 url 的 POST 请求运行过滤器blobstoreService.createUploadUrl()
?
这是不可能的,因为在 blobstore 服务上createUploadUrl()
提供了直接 url。上传完成后,您的处理程序被调用,此时您可以(正如您已经注意到的)通过过滤器检查标头。
如果您需要在上传时检查上传,请创建您自己的文件上传处理程序并直接将文件写入 blobstore。
更新: OP澄清了这个问题。
上传必须是带有multipart/form-data
内容的 HTTP POST。GAE 重写请求,删除文件主体并添加 blob 键作为表单参数。阅读上传 Blob 文档的最后一段。
由于 GAE 是 Servlet API 2.5,因此您必须手动获取此参数(getParameter()
不起作用):在 Servlet 中解析传入的 multipart/form-data 参数的便捷方法
在过滤器中检查请求内容的问题在于,通过 提供的请求正文request.getInputStream()
只能被使用一次。如果您在过滤器中执行此操作,则在过滤器之后调用的 servlet 将不会得到它。要解决它,您需要包装请求并缓冲内容 - 请参阅示例转储过滤器如何做到这一点:https ://github.com/leanengine/LeanEngine-Server/blob/master/lean-server-lib/src /main/java/com/leanengine/server/DumpFilter.java