SpringBootでどのようにZIPファイルをエクスポートするか

Spring Bootアプリケーションでは、java.util.zipパッケージを使用してZIPファイルをエクスポートできます。以下は、複数のファイルを1つのZIPファイルに圧縮してエクスポートする方法を示すサンプルコードです。

最初に、pom.xmlファイルに以下の依存関係を追加する必要があります。

<dependencies>
    ...
    <dependency>
        <groupId>org.zeroturnaround</groupId>
        <artifactId>zt-zip</artifactId>
        <version>1.14</version>
    </dependency>
    ...
</dependencies>

そうするとSpring Bootのコントローラーで、リクエストを処理してZIPファイルをエクスポートするメソッドを追加できるようになります。

import org.zeroturnaround.zip.ZipUtil;

import java.io.File;
import java.io.IOException;

@RestController
public class ZipController {

    @GetMapping("/export")
    public ResponseEntity<Resource> exportZip() throws IOException {
        // 创建一个临时目录用于存储要压缩的文件
        File tempDir = new File(System.getProperty("java.io.tmpdir") + "/temp");
        tempDir.mkdirs();

        // 创建一些临时文件用于示例
        File file1 = new File(tempDir.getPath() + "/file1.txt");
        File file2 = new File(tempDir.getPath() + "/file2.txt");
        file1.createNewFile();
        file2.createNewFile();

        // 压缩临时目录中的文件到zip文件
        File zipFile = new File(System.getProperty("java.io.tmpdir") + "/example.zip");
        ZipUtil.pack(tempDir, zipFile);

        // 创建一个文件资源对象
        Path path = Paths.get(zipFile.getAbsolutePath());
        UrlResource resource = new UrlResource(path.toUri());

        // 设置响应头信息
        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=example.zip");

        // 返回zip文件作为响应
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(resource.contentLength())
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(resource);
    }

}

サンプルコードでは、まず一時ディレクトリ `tempDir` を作成し、そこにサンプルファイルをいくつか作成して保存します。次に、`ZipUtil.pack()` メソッドで一時ディレクトリ内のファイルを zip ファイル `zipFile` に圧縮します。その後、`UrlResource` を使って zip ファイルをファイルリソースオブジェクトにラップします。最後に、レスポンスヘッダ情報を設定して、レスポンスとして zip ファイルを返します。

例では zt-zip ライブラリを使用して zip ファイルを操作していますが、他のライブラリを選択したり、Java に標準装備されている java.util.zip パッケージを使用したりすることもできます。

Spring Bootアプリケーションを起動すると、/exportパスにアクセスすることでzipファイルをエクスポートできます。

bannerAds