문제
Grails 웹 사이트에서 파일 업로드 코드를 모방하려고 노력하고 있으며 몇 가지 문제가 발생합니다. 찾은 것과 동일한 코드를 사용하고 있습니다 여기. 내 코드는 다음과 같습니다.
<g:form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="myFile" />
<input type="submit" value="Upload" />
</g:form>
그리고
def upload = {
def f = request.getFile('myFile')
if(!f.empty) {
flash.message = 'success'
}
else {
flash.message = 'file cannot be empty'
}
}
런타임에 다음 오류를 받고 있습니다.
Message: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}
Caused by: groovy.lang.MissingMethodException: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}
일부 스프링 구성과 관련이있는 것으로 보입니다. 스프링은 주입되지 않는 것 같습니다 MultipartHttpServletRequest
, 내 요청에는 적절한 방법이 없습니다. 방금이 응용 프로그램을 사용하여 만들었습니다 grails create-app
. Resources.groovy 파일을 수정하지 않았습니다. 성배 1.0.3을 사용하고 있습니다.
모든 도움은 대단히 감사합니다. Grails 웹 사이트는 이것을 매우 쉽게 보입니다.
해결책
문제 해결됨!
원래 저자와 다른 성배에 파일을 업로드하기 위해 예제 코드를 사용하고있었습니다. 문제는 업로드 컨트롤러의 방법이 호출되었으며 때로는 업로드 페이지의 원래 렌더링을위한 것입니다. 이 방법의 요청은 유형의 multiparthttpservletrequest가 아닙니다. 업로드하기 위해 파일로 게시물을 작성했을 때 Spring은 올바른 일을했고 요청을 MultiparthTtpservletRequest로 변경했습니다. 그래서 나는 간단한 체크인을해야했습니다. 업데이트 컨트롤러 메소드 MultiparthtTpservletRequest와 같은 요청을 사용하기 전에.
if(request instanceof MultipartHttpServletRequest)
{
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myFile");
if(!f.empty)
flash.message = 'success'
else
flash.message = 'file cannot be empty'
}
else
flash.message = 'request is not of type MultipartHttpServletRequest'
다른 팁
이제 Grails와 함께 2.x 사용 :
<g:uploadForm name="upload" action="upload" method="POST">
<input type="file" name="file" />
</g:uploadForm>
def upload = {
def file = request.getFile('file')
assert file instanceof CommonsMultipartFile
if(!file.empty){ //do something }
else { //do something }
}
더 깨끗하고 간단합니다.
HTML (업로드 할 양식으로 GSP)을 업데이트하여 ENCTYPE 그들이 보여줄 때 :
<g:form action="upload" method="post" enctype="multipart/form-data">
그것이 도움이되기를 바랍니다. 너무 분명해 보이지만 오류 메시지를 본 후 첫 생각입니다.
누구 여기 당신이 가진 것과 똑같은 문제가있는 것 같습니다. 그는 자신이 "고정"한다고 말합니다.
해결되었습니다. 그것은 내 실수 였고, 양식을 제출하기 전에 행동을 저장하고 있었기 때문에 파일이 없다고 생각합니다.
그가 말한 것을 어떻게 받아들이는지 잘 모르겠지만 아마도 당신을 도울 것입니다.