首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从HttpInputStream中移除请求头

如何从HttpInputStream中移除请求头
EN

Stack Overflow用户
提问于 2012-07-13 21:49:26
回答 3查看 3.2K关注 0票数 2

我需要一个servlet的帮助。

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

请参阅写入文件中的初始字节。

代码语言:javascript
运行
复制
-qF3PFkB8oQ-OnPe9HVzkqFtLeOnz7S5Be
Content-Disposition: form-data; name=""; filename=""
Content-Type: application/octet-stream; charset=ISO-8859-1
Content-Transfer-Encoding: binary

我想删除它,并且只从tiff文件中写入字节。附言:文件的发送者不是我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-14 19:30:44

Apache commons解决了90%的问题...只需要知道在搜索中使用什么关键字:)

"parse multipart request“和谷歌说:http://www.oreillynet.com/onjava/blog/2006/06/parsing_formdata_multiparts.html

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-07-13 22:26:10

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

这样做的一种方法是:

代码语言:javascript
运行
复制
String headers = new java.util.Scanner(inputStream).next("\\r\\n\\r\\n");
// Read rset of input stream
票数 1
EN

Stack Overflow用户

发布于 2021-04-16 12:25:44

对于我来说,我使用的注释和参数如下:

代码语言:javascript
运行
复制
@Consumes(MediaType.APPLICATION_OCTET_STREAM)

公共响应testUpload(文件uploadedInputStream)

然后,我可以使用以下命令读取文件内容:

代码语言:javascript
运行
复制
 byte[] totalBytes = Files.readAllBytes(Paths.get(uploadedInputStream.toURI()));

然后我不得不忽略前4行,也忽略了内容的结尾部分,如下所示:

代码语言:javascript
运行
复制
int headerLen = 0;
int index = 0;
while(totalBytes[index] != '\n' && index < totalBytes.length) {
    headerLen++;
    index++;
}
            
//ignore next three line
for (int i = 0; i < 3; i++) {
    index++;
    while (totalBytes[index] != '\n' && index < totalBytes.length) {
        index++;
    }
}
index++;
out.write(totalBytes, index, totalBytes.length - index - (headerLen+3));
out.flush();
out.close();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11471822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档