게시된 데이터가 multipart/form-data인지 서블릿이 확인할 수 있습니까?
-
09-06-2019 - |
문제
나는 다양한 작업에 사용되는 서블릿을 가지고 있습니다. 전면 컨트롤러 패턴.다시 게시된 데이터가 enctype="multipart/form-data"인지 알 수 있는지 아는 사람이 있습니까?이를 결정할 때까지는 요청 매개변수를 읽을 수 없으므로 요청을 적절한 컨트롤러로 보낼 수 없습니다.
어떤 아이디어가 있나요?
해결책
예, Content-type
사용자 에이전트 요청의 헤더에는 다음이 포함되어야 합니다. multipart/form-data
(적어도) HTML4 사양에 설명된 대로:
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
다른 팁
위에 제시된 request.getContentType() 메서드를 사용하려고 한다면 다음 사항에 유의하세요.
- request.getContentType()은 null을 반환할 수 있습니다.
- request.getContentType()은 그렇지 않을 수 있습니다. 동일한 "multipart/form-data"로 변경했지만 그냥 시작할 수도 있습니다.
이를 염두에 두고 실행해야 할 검사는 다음과 같습니다.
if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}
콘텐츠 유형을 가져오는 메서드를 호출할 수 있습니다.
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()
에 따르면 http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, 콘텐츠 유형은 "multipart/form-data"입니다.
다음 사항을 잊지 마세요.
request.getContentType()은 null을 반환할 수 있습니다.
request.getContentType()은 "multipart/form-data"와 같지 않을 수 있지만 그냥 시작될 수 있습니다.
따라서 이 모든 것을 염두에 두고:
if (request.getContentType() != null &&
request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 )
{
<< code block >>
}
ServletFileUpload는 isMultipartContent()를 구현합니다.아마도 필요에 따라 이 구현을 해제할 수 있습니다(ServletFileUpload를 생성하기 위해 오버헤드를 거치는 대신).
http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.html
이를 확인하려면 최소한 요청 매개변수를 읽어야 합니다. 일부 수준.ServletRequest 클래스에는 살펴보고 싶은 getContentType 메소드가 있습니다.
확장하려면 awm129의 답변 - Apache Commons의 구현은 다음과 같습니다.
if (request != null
&& request.getContentType() != null
&& request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
...
}
Apache Commons를 사용하면 훨씬 더 짧게 작성할 수 있습니다. org.apache.commons.lang3.StringUtils
:
if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) {
...
}
https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts()
java.util.Collection getParts()
던지기:ServletException - 이 요청이 multipart/form-data 유형이 아닌 경우