2013-04-15 3 views
0

나는 그림을 업로드하는 사용자와 함께 작동하는 웹 응용 프로그램 프로젝트에서 작업중인 초보자에서 grails입니다. 사용자는 프롬프트 목록을 사용하여 "헌트"를 만들 수 있습니다. 각 "프롬프트"는 참가자의 목표입니다 (예 : 좋아하는 캔디의 사진 업로드). 기본적으로 웹 응용 프로그램은 사진 작가가 소셜 활동을 공유하는 "스 캐빈 저 헌트"도구입니다.Grails 다운로드 할 사용자를위한 zip 파일 생성

지금 사용자가 업로드 한 모든 그림이 포함 된 zip 파일을 생성하기 위해 내 사용자 컨트롤러에 함수를 작성하는 데 문제가 있습니다. 이것은 내 컨트롤러 기능이 지금과 같은 모습입니다. 시작하려면 찾은이 예제를 사용했습니다. Generating a zip file.

def downloadAlbum(){ 

    ByteArrayOutputStream baos = new ByteArrayOutputStream() 
    ZipOutputStream zipFile = new ZipOutputStream(baos) 

    //Instance of a user domain class 
    def userInstance = User.findByLogin(auth.user()) 

    //pictures are uploaded to a prompt and stored as a photoInstance 
    //this line of code gets the actual file stored as byte[] 
     photoInstance.myFile = image.getBytes() 

    //select all photos that belong to the user and store them into a list 
    def photoInstanceList = userInstance ? Photo.findAllByMyUser(userInstance) : [] 


    //Mapping 
    [userInstance: userInstance, photoInstanceList: photoInstanceList]  

     photoInstanceList.each {photo -> 
     if (photoInstance.myFile != "") { 
      File file = new File(photoInstance.myFile) 
      zipFile.putNextEntry(new ZipEntry(Photo.title+".jpeg")) 
      file.withInputStream { i -> 

      zipFile << i 

      } 
      zipFile.closeEntry() 
     } 
     } 
     zipFile.finish() 
     response.setHeader("Content-disposition", "filename=\"${login}.zip\"") 
     response.contentType = "application/zip" 
     response.outputStream << baos.toByteArray() 
     response.outputStream.flush() 

} 

나는 다음 사용자 컨트롤러에서 함수를 호출하는 링크를 생성하는 사용자보기에이 코드를 사용합니다. 내가 닫을 까? 내 코드에 누락 된 부분이 있습니까?

그건 그렇고, 이것은 Stack Overflow에서 작성한 첫 번째 질문입니다. 이 항목을 읽으려고 시간을 갖게되어서 고맙습니다. 명확하지 않은 부분이 있으면이 질문을 개선 할 수있는 부분을 참조하십시오. grails 2.1.1을 사용하고 있습니다.

감사합니다! 여기로 위의 코드를 복사 한 경우

+0

스택 트레이스 디버깅에 큰 도움이 될 것입니다 아래 줄에 photo.title 대신 Photo.title를 사용해서는 안된다. – dmahapatro

+0

이 코드를 사용하면 어떻게됩니까? zip 파일이 없습니까? 잘못되었거나 불완전한 zip 파일입니까? 오류? 무엇이 잘못되었는지 알려면 게시물을 업데이트하십시오. – uchamp

답변

1

, 우리는

zipFile.putNextEntry(new ZipEntry(Photo.title+".jpeg"))