Grails生成一个zip文件供用户下载

时间:2013-04-15 22:55:59

标签: model-view-controller grails controller gorm

我是新手 grails 目前正在处理与上传图片的用户合作的网络应用项目。用户可以使用提示列表创建“搜索”。每个“提示”都是参与者的目标(例如:上传你最喜欢的糖果的照片。)基本上,网络应用程序是摄影师在社交上分享他们工作的“清道夫”工具。

现在,我在我的用户控制器中尝试编写一个函数来生成一个包含用户上传的所有图片的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

感谢您的时间!!

1 个答案:

答案 0 :(得分:1)

如果上述代码已按此处复制,则我们不应在下面的行中使用photo.title代替Photo.title

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