情况是一个ZIP文件已经被post到Tomcat服务器,由于它没有与之关联的参数名,我们直接进入请求的流。
ServletInputStream sis = request.getInputStream()
ZipInputStream zis = new ZipInputStream(sis)
ZipEntry zEntry = zis.getNextEntry()
while (zEntry != null) {
// do something with zEntry
zEntry = zis.getNextEntry()
}
非常简单,但它不起作用。它永远不会进入while循环,因为第一个zEntry为空。(ZIP文件是有效的,btw)
任何想法?由于
编辑:类型是multipart/form-data ("multipart/form-data;边界 =--------------------- 8 ce556d90e9deb6")编辑:类型为multipart/form-data ("multipart/form-data;边界 =--------------------- 8 ce556d90e9deb6")
您需要使用multipart/form-data
解析器来提取上传的文件。你不应该把它生喂给ZipInputStream
。然而,令我惊讶的是,它没有抛出一个异常,它不是ZIP文件格式。
getParameter()
和配偶仅为application/www-form-urlencoded
请求而设计。它们都将在multipart/form-data
请求时返回null
。您需要使用getParts()
方法代替。或者,当您仍然使用Servlet 2.5或更早的版本时,则需要在Apache Commons Fileupload的帮助下解析正文。
无论哪种方式,您都应该能够迭代multipart/form-data
项并将上传的文件作为InputStream
获取,然后使用ZipInputStream
读取。
参见:
- 如何使用JSP/Servlet上传文件到服务器?