Grails示例程序-用代码实现将文件压缩后下载

这个示例程序只有一个页面,显示下载链接,点链接后可以下载一个zip包,这个zip包中包含两个文件。

下面是提供下载页面的controller和view

  • 下载页面

SampleZipController.groovy


package com.tutorial

import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

class SampleZipController {
    def index() { }
}

index.gsp


<!DOCTYPE html>
<html>
    <head>
        <meta name="layout" content="main"/>
        <title>Simple Zip</title>
    </head>

    <body>
        <g:link action="downloadSampleZip">Download Sample Zip</g:link>
    </body>
</html>
  • 打包下载完整代码

打包下载完整代码如下。


import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

class SampleZipController {

    def index() { }

    def downloadSampleZip() {
        response.setContentType('APPLICATION/OCTET-STREAM')
        response.setHeader('Content-Disposition', 'Attachment;Filename="example.zip"')

        ZipOutputStream zip = new ZipOutputStream(response.outputStream);
        def file1Entry = new ZipEntry('first_file.txt');
        zip.putNextEntry(file1Entry);
        zip.write("This is the content of the first file".bytes);

        def file2Entry = new ZipEntry('second_file.txt');
        zip.putNextEntry(file2Entry);
        zip.write("This is the content of the second file".bytes);

        zip.close();
    }
}

关键代码注解

1.下面的代码告诉浏览器输出文件的类型和文件名


response.setContentType('APPLICATION/OCTET-STREAM')
response.setHeader('Content-Disposition', 'Attachment;Filename="example.zip"')

2.下面的代码创建一个zip文件


ZipOutputStream zip = new ZipOutputStream(response.outputStream);

3.下面的代码创建zip文件中的内容,其实只需要实例化一个ZipEntry,并提供需要压缩文件的字节内容即可


def file1Entry = new ZipEntry('first_file.txt')
zip.putNextEntry(file1Entry)
zip.write("This is the content of the first file".bytes)

4.最后,创建完一个zip文件后需要关闭


zip.close();
  • 备注

以上示例是一个简单的例子,有兴趣的朋友可以试着改写,将不同类型的文件打包压缩到一个zip文件中。这里是本文完整代码的下载地址

你可能感兴趣的:(Grails示例程序-用代码实现将文件压缩后下载)