我不能使用请求,因为多部分实现中存在一些缺陷。
那么你的实际问题是你使用了一个糟糕的实现。Servlet API 默认不支持请求编码,multipart/form-data
您不会在请求参数映射中看到任何内容。要检索上传的文件和其他请求参数,您需要自己解析InputStream
。HttpServletRequest
但幸运的是,有一个常用的 API 可以帮助您完成宝贵而繁琐的工作:Apache Commons FileUpload。在他们的主页上,您可以在用户指南和常见问题部分中找到大量代码示例和重要提示和技巧。仔细阅读它们。基本上,您只需InputStream
要从FileItem
对象中获取并使用通常的方式将其写入任何OutputStream
您喜欢的Java IO方式。您甚至可以FileItem#write()
为此使用简写。
如有必要,您还可以编写一个在后台Filter
使用 Apache Commons FileUpload 的代码,并检查每个请求是否存在multipart/form-data
,如果是,则在 Commons FileUpload 的帮助下将参数放回请求参数映射中,并将上传的文件(或exceptions) 作为请求属性,因此它最终在您的 servlet 代码中更加透明。你可以在这里找到一个基本的例子来理解这个想法。
总结:不要发明变通办法/黑客来“解决”这个问题。确保不要使用 Ajax 在会话中设置请求参数,同时以任何方式将它们发送到服务器端。只需使用正确的解决方案来解决问题。使用一个好的multipart/form-data
解析器。
希望这可以帮助。