0

我正在尝试将文件上传到 java appengine 中的 blobstore。在上传文件的 POST 请求中(在我创建了上传 URL 之后),我有几个额外的 post 参数。当我的 servlet 链运行时,我的过滤器无法访问这些参数(参数映射为空),但上传完成回调可以。

如何从 HTTP 过滤器访问这些 post 参数?

4

2 回答 2

-1

request.getParameter("paramName");

request.getInputStream()上传的文件。

于 2012-04-25T03:48:33.223 回答
-1

如果我理解正确,您想对通过创建的 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

于 2012-04-25T05:45:52.273 回答