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ファイルをエクスポートできます。