[SPRING] Jetty에서는 파일 업로드가 작동하지만 Tomcat에서는 작동하지 않습니다.
SPRINGJetty에서는 파일 업로드가 작동하지만 Tomcat에서는 작동하지 않습니다.
나는 파일 업로드를 할 수있는 봄에 웹 애플리케이션을 가지고있다. 일식에서 Jetty (maven 플러그인)를 사용하면 완벽하게 작동합니다. 하지만 응용 프로그램을 Tomcat에 배포 할 때 다음과 같은 예외가 발생합니다.
org.springframework.web.bind.MissingServletRequestParameterException: Required org.springframework.web.multipart.MultipartFile parameter 'file' is not present
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.raiseMissingParameterException(AnnotationMethodHandlerAdapter.java:545)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:336)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:207)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:132)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
여기 내 양식이 있습니다 :
<form method="post" action="../admin/import.html" id="import"
enctype="multipart/form-data">
<div id="importInmates" align="center">
<input type="file" name="file" id="file"
data-dojo-type="dijit.form.Button"
label="<fmt:message key='import.file' />" />
<button data-dojo-type="dijit.form.Button" id="importInmates"
type="submit">
<fmt:message key="import.import" />
</button>
</div>
<input type="hidden" name="importType" value="inmates" />
</form>
다음은 가로 채기 방법입니다.
@RequestMapping(value = IMPORT_PAGE, method = RequestMethod.POST)
public String recieveFile(@RequestParam("importType") String importType,
@RequestParam("file") MultipartFile multipartFile, final HttpSession session)
{
if (multipartFile.getSize() < 0)
{
LOGGER.debug("No file has been uploaded");
return "redirect:.." + IMPORT_PAGE;
}
File file = new File("tmp");
try
{
multipartFile.transferTo(file);
BufferedReader lec = new BufferedReader(new FileReader(file));
LOGGER.debug(lec.readLine());
lec.close();
}
catch (Exception e)
{
LOGGER.error("An exception occured while reading " + importType + " file", e);
}
return "redirect:.." + IMPORT_PAGE;
}
다음 bean을 추가했습니다.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"></property>
</bean>
applicationContext.xml과 mvc-servlet.xml 둘 다 중요하다.
어떤 도움을 주시면 감사하겠습니다.
감사.
해결법
-
==============================
1.@Bart 덕분에 다음과 같은 간단한 솔루션을 찾을 수있었습니다 :
@Bart 덕분에 다음과 같은 간단한 솔루션을 찾을 수있었습니다 :
인터셉터 메서드에서 @RequestParam 대신 @ModelAttribute를 사용하십시오.
@RequestMapping(value = IMPORT_PAGE, method = RequestMethod.POST) public String recieveFile(@RequestParam("importType") String importType, @ModelAttribute("file") UploadedFile uploadedFile, final HttpSession session) { MultipartFile multipartFile = uploadedFile.getFile();
여기서 UploadedFile은 다음 클래스입니다.
public class UploadedFile { private String type; private MultipartFile file; public String getType() { return type; } public void setType(String type) { this.type = type; } public void setFile(MultipartFile file) { this.file = file; } public MultipartFile getFile() { return file; } }
그리고 그것은 작동 중입니다 !!
도와 주신 모든 분들께 감사드립니다.
-
==============================
2.@RequestParam 대신 @RequestPart를 사용하십시오.
@RequestParam 대신 @RequestPart를 사용하십시오.
출처 :
from https://stackoverflow.com/questions/23698562/file-upload-working-under-jetty-but-not-under-tomcat by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 사용자 정의 메소드 보안 표현식을 작성하는 가장 좋은 방법 (0) | 2019.04.10 |
---|---|
[SPRING] 나머지 컨트롤러 vs spring-data-rest RepositoryRestResource (0) | 2019.04.10 |
[SPRING] 임시 파일에 대한 파일을 찾을 수 없음 (0) | 2019.04.10 |
[SPRING] Null ModelAndView가 DispatcherServlet으로 반환되었습니다. (0) | 2019.04.10 |
[SPRING] 핸들러가 호출되기 전에 Tomcat 8 및 Spring 4가있는 웹 소켓 ClassCastException (0) | 2019.04.10 |