Skip to content

Instantly share code, notes, and snippets.

@gomo
Last active August 29, 2015 13:59
Show Gist options
  • Save gomo/10951763 to your computer and use it in GitHub Desktop.
Save gomo/10951763 to your computer and use it in GitHub Desktop.
HttpPostとServletFileUploadでContentTypeを取得できない
//POSTを投げる側のコード
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/test/post");
MultipartEntityBuilder params = MultipartEntityBuilder.create();
params.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//ContentTypeをセットしないと文字化けします
params.addTextBody("text", "マルチバイトテキスト", ContentType.create("text/plain", MIME.UTF8_CHARSET));
File upfile = new File( "sample/yoro.jpeg" );
params.addPart("image", new FileBody(upfile, ContentType.create("image/jpeg")));
httpPost.setEntity(params.build());
HttpResponse response = httpClient.execute( httpPost );
//POSTを受ける側のコード
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
FileItemHeaders headers = null;
Map<String,List<FileItem>> params = upload.parseParameterMap(request);
System.out.println(params.get("text").get(0).getString("UTF-8"));//正常に読める
System.out.println(params.get("text").get(0).getContentType());//NULL
headers = params.get("text").get(0).getHeaders();
for (Iterator<String> iterator = headers.getHeaderNames(); iterator.hasNext();) {
String key= iterator.next();
System.out.print(key + " : ");
System.out.println(headers.getHeader(key));
}//Content-Typeはありません。
System.out.println(params.get("image").get(0).getContentType());//NULL
headers = params.get("image").get(0).getHeaders();
for (Iterator<String> iterator = headers.getHeaderNames(); iterator.hasNext();) {
String key= iterator.next();
System.out.print(key + " : ");
System.out.println(headers.getHeader(key));
}//Content-Typeはありません。
@gomo
Copy link
Author

gomo commented Apr 17, 2014

下記のような感じで生POSTを覗いてみたら送信されてないことが判明

try {
  InputStream body = request.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(body));

      String reqStr = "";
      String s;
      while ((s = reader.readLine()) != null) {
        reqStr = reqStr + s;
      }
      reader.close();

      System.out.println(reqStr);
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

さらに

params.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

これをコメントアウトすると送信されることを確認しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment