diff --git a/backend-src/src/main/java/com/taoes/simpledocker/controller/ImageController.java b/backend-src/src/main/java/com/taoes/simpledocker/controller/ImageController.java index f5c06149289e5d1123d9bd6d22aec3c074a76a36..455b227016907114d77c115eb423b3618eeb8770 100644 --- a/backend-src/src/main/java/com/taoes/simpledocker/controller/ImageController.java +++ b/backend-src/src/main/java/com/taoes/simpledocker/controller/ImageController.java @@ -22,6 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * TODO: please input file info * @@ -99,4 +102,13 @@ public class ImageController { imageService.tag(req.getImageId(),req.getNewTag()); return ResponseModel.ok(true); } + + /** + * 保存镜像 + */ + @GetMapping("/save/{nameTag}") + public ResponseModel save(@PathVariable String nameTag, HttpServletRequest request,HttpServletResponse response) { + imageService.save(nameTag,request,response); + return ResponseModel.ok("OK"); + } } diff --git a/backend-src/src/main/java/com/taoes/simpledocker/service/ImageService.java b/backend-src/src/main/java/com/taoes/simpledocker/service/ImageService.java index 89588277cb6bf27f380ff5c0ae73e5c616a6486b..333bb89bffe1e587de43e75c1acbc6fad3396985 100644 --- a/backend-src/src/main/java/com/taoes/simpledocker/service/ImageService.java +++ b/backend-src/src/main/java/com/taoes/simpledocker/service/ImageService.java @@ -5,6 +5,9 @@ import java.util.List; import com.github.dockerjava.api.command.InspectImageResponse; import com.github.dockerjava.api.model.Image; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * 镜像相关服务 * @@ -89,4 +92,9 @@ public interface ImageService { * 清理镜像 */ void pruneImage(); + + /** + * 镜像导出 + */ + void save(String nameTag, HttpServletRequest request,HttpServletResponse response); } diff --git a/backend-src/src/main/java/com/taoes/simpledocker/service/imple/ImageServiceImpl.java b/backend-src/src/main/java/com/taoes/simpledocker/service/imple/ImageServiceImpl.java index 5fe35c771c21b4799df004501b9491bf60476cc7..7f5ba31166ad2813a2e1b95121ec7327990fdd05 100644 --- a/backend-src/src/main/java/com/taoes/simpledocker/service/imple/ImageServiceImpl.java +++ b/backend-src/src/main/java/com/taoes/simpledocker/service/imple/ImageServiceImpl.java @@ -1,6 +1,10 @@ package com.taoes.simpledocker.service.imple; +import com.github.dockerjava.api.command.SaveImageCmd; import com.taoes.simpledocker.model.exception.NotFoundClientException; + +import java.io.*; +import java.net.URLEncoder; import java.util.List; import com.github.dockerjava.api.DockerClient; @@ -14,6 +18,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * 镜像相关服务实现 * @@ -97,4 +104,26 @@ public class ImageServiceImpl implements ImageService { final DockerClient dockerClient = factory.get(); dockerClient.pruneCmd(PruneType.IMAGES).exec(); } + + @Override + public void save(String nameTag, HttpServletRequest request,HttpServletResponse response) { + final DockerClient dockerClient = factory.get(); + String[] nameTagArr = nameTag.split("\\:"); + //docker save + InputStream input = dockerClient.saveImageCmd(nameTagArr[0]).withTag(nameTagArr[1]).exec(); + try { + response.setContentType("application/ms-excel;charset=UTF-8"); + response.setHeader("Content-Disposition","attachment;filename="+nameTag+".zip"); + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + while ((len = input.read(b)) > 0) { + response.getOutputStream().write(b, 0, len); + } + input.close(); + response.getOutputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } }