2

サーブレットについて助けが必要です。

1 つの要求で inputStream を読み取り、tiff ファイルを書き込む必要があります。inputStream にはリクエストヘッダーが付属しており、そのバイトを削除してファイルのみを書き込む方法がわかりません。

writen ファイルの最初のバイトを参照してください。

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

それを削除して、tiff ファイルからバイトのみを書き込みたいです。PS: ファイルの送信者は私ではありません。

4

3 に答える 3

1

Apache Commons はあなたの問題の 90% を解決します...検索で使用するキーワードを知るだけで済みます :)
"parse multipart request" と Google は言う: 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();
}
于 2012-07-14T11:30:44.330 に答える
1

ヘッダーなしでコンテンツを取得するために HttpServletRequest の getInputStream() メソッドを使用していない理由がわかりません。いずれにしても、入力ストリームの読み取りを開始し、2 つの連続する CRLF を見つけるまでコンテンツを無視するオプションがあります。ヘッダーの最後。

これを行う1つの方法は次のとおりです。

String headers = new java.util.Scanner(inputStream).next("\\r\\n\\r\\n");
// Read rset of input stream
于 2012-07-13T14:26:10.333 に答える