如何使用HttpServletRequest延迟流#getPart(name)

时间:2014-10-03 02:09:27

标签: servlets

我正在使用Jetty 9的HttpServletRequest#getPart(name)实现,在继续之前,它似乎急切地处理整个请求(或者至少是Part),即使生成的{{1}公开Part方法。

getInputStream()是否有办法立即返回,并将请求流式传输到生成的getPart的{​​{1}}?

供参考,以下是我Part实施的相关摘录:

InputStream

1 个答案:

答案 0 :(得分:1)

这是邪恶乏味的,但可以使用MultipartStream中的commons-fileupload来完成:

try {
   MultipartStream multipartStream = new MultipartStream(input, boundary);
   boolean nextPart = multipartStream.skipPreamble();
   OutputStream output;
   while(nextPart) {
     String header = multipartStream.readHeaders();
     // process headers
     // create some output stream
     multipartStream.readBodyData(output);
     nextPart = multipartStream.readBoundary();
   }
 } catch(MultipartStream.MalformedStreamException e) {
   // the stream failed to follow required syntax
 } catch(IOException e) {
   // a read or write error occurred
 }

这需要使用InputStream中的HttpServletRequest#getInputStream(),以及HTTP请求的内容类型中编码的边界定界符:

Content-Type: multipart/form-data; boundary=------------------------bd019839518ca918