2013-04-15 80 views
0

我是新手grails目前正在開發一個web用戶項目,該用戶可以上傳圖片。用戶可以用提示列表創建一個「尋找」。每個「提示」是參與者的目標(例如:上傳你喜歡的糖果的圖片)。基本上,網絡應用程序是一個「搜索者」搜索工具,供攝影師社交分享他們的作品。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

當你使用這段代碼時會發生什麼?沒有壓縮文件?不正確或不完整的壓縮文件?錯誤?請更新您的帖子,告訴出了什麼問題。 – uchamp

回答

1

如果上面的代碼已經被複制的是在這裏,我們不應該在下面的線

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