문제

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">

그것이 도움이되기를 바랍니다. 너무 분명해 보이지만 오류 메시지를 본 후 첫 생각입니다.

누구 여기 당신이 가진 것과 똑같은 문제가있는 것 같습니다. 그는 자신이 "고정"한다고 말합니다.

해결되었습니다. 그것은 내 실수 였고, 양식을 제출하기 전에 행동을 저장하고 있었기 때문에 파일이 없다고 생각합니다.

그가 말한 것을 어떻게 받아들이는지 잘 모르겠지만 아마도 당신을 도울 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top