2012-07-13 142 views
2

我需要关于servlet的帮助。如何从HttpInputStream中删除请求标头

我需要在一个请求中读取一个inputStream并写入一个tiff文件。 inputStream带有请求头,我不知道如何删除该字节并只写入该文件。

查看写入文件中的初始字节。

-qF3PFkB8oQ-OnPe9HVzkqFtLeOnz7S5Be 
Content-Disposition: form-data; name=""; filename="" 
Content-Type: application/octet-stream; charset=ISO-8859-1 
Content-Transfer-Encoding: binary 

我想从tiff文件中删除并写入字节。 PS:文件发送者不是我。

回答

1

阿帕奇公地解决90%的问题,你...只需要知道在搜索关键词的使用:)
“解析多要求” 和谷歌说: http://www.oreillynet.com/onjava/blog/2006/06/parsing_formdata_multiparts.html

int boundaryIndex = contentType.indexOf("boundary="); 
byte[] boundary = (contentType.substring(boundaryIndex + 9)).getBytes(); 

ByteArrayInputStream input = new ByteArrayInputStream(buffer.getBytes()); 
MultipartStream multipartStream = new MultipartStream(input, boundary); 

boolean nextPart = multipartStream.skipPreamble(); 
while(nextPart) { 
    String headers = multipartStream.readHeaders(); 
    System.out.println("Headers: " + headers); 
    ByteArrayOutputStream data = new ByteArrayOutputStream(); 
    multipartStream.readBodyData(data); 
    System.out.println(new String(data.toByteArray()); 

    nextPart = multipartStream.readBoundary(); 
} 
1

我不确定你为什么不使用HttpServletRequest的getInputStream()方法来获取没有它的头部的内容,无论哪种方式,你都可以选择开始读取输入流并忽略内容,直到找到两个连续的CRLF ,它定义了标题的结尾。

这样做的一个方法是这样的:

String headers = new java.util.Scanner(inputStream).next("\\r\\n\\r\\n"); 
// Read rset of input stream 
+0

我使用的getInputStream()和读白衣用一个字节[]缓冲液中的“的BufferedInputStream” ...但在的inputStream而来的报头。我会尝试使用java.util.Scanner – 2012-07-13 14:36:37

+0

我tryed扫描仪。 ,帮助我删除第一行“\\ r \\ n \\ r \\ n” 但我的tiff不起作用。 我认为我的inputStream是所有请求的主体。 在流的写入文件的最后一行具有第一行相同的代码“-qF3PFkB8oQ-OnPe9HVzkqFtLeOnz7S5Be”。如果是这样,我只需要学习如何作为一个身体读取流,并从身体获得我的文件字节 – 2012-07-13 15:42:50

+0

ty男人,你回答帮助我找到解决方案:) – 2012-07-14 11:35:05