ConsistentCheckTest.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import cn.reghao.dfs.store.db.mapper.*;
  2. import cn.reghao.dfs.store.model.constant.VideoUrlType;
  3. import cn.reghao.dfs.store.model.dto.UploadingFile;
  4. import cn.reghao.dfs.store.model.po.*;
  5. import cn.reghao.dfs.store.model.vo.ImageFileRet;
  6. import cn.reghao.dfs.store.model.dto.UploadedFile;
  7. import cn.reghao.dfs.store.service.FileUploadService;
  8. import cn.reghao.dfs.store.service.media.ImageFileService;
  9. import cn.reghao.dfs.store.service.media.MediaQuality;
  10. import cn.reghao.dfs.store.service.media.MediaResolution;
  11. import cn.reghao.jutil.jdk.http.util.UrlFormatter;
  12. import cn.reghao.dfs.store.DfsStoreApplication;
  13. import cn.reghao.jutil.tool.id.IdGenerator;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.io.FileUtils;
  16. import org.junit.Test;
  17. import org.junit.runner.RunWith;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.boot.test.context.SpringBootTest;
  20. import org.springframework.test.context.ActiveProfiles;
  21. import org.springframework.test.context.junit4.SpringRunner;
  22. import java.io.*;
  23. import java.net.URI;
  24. import java.net.http.HttpClient;
  25. import java.net.http.HttpRequest;
  26. import java.net.http.HttpResponse;
  27. import java.time.Duration;
  28. import java.util.*;
  29. /**
  30. * @author reghao
  31. * @date 2022-04-23 17:17:50
  32. */
  33. @Slf4j
  34. @ActiveProfiles("dev")
  35. @SpringBootTest(classes = DfsStoreApplication.class)
  36. @RunWith(SpringRunner.class)
  37. public class ConsistentCheckTest {
  38. @Autowired
  39. FileUploadService fileUploadService;
  40. @Autowired
  41. ImageFileService imageFileService;
  42. HttpClient client = HttpClient.newBuilder()
  43. .version(HttpClient.Version.HTTP_1_1)
  44. .build();
  45. @Test
  46. public void test() {
  47. List<String> urls = new ArrayList<>();
  48. for (String url : urls) {
  49. try {
  50. HttpRequest.Builder builder = HttpRequest.newBuilder()
  51. .uri(URI.create(url))
  52. .timeout(Duration.ofSeconds(30))
  53. .GET();
  54. HttpResponse<InputStream> streamBody = client.send(builder.build(), HttpResponse.BodyHandlers.ofInputStream());
  55. if (streamBody.statusCode() != 200) {
  56. log.error("{} 获取失败", url);
  57. continue;
  58. }
  59. byte[] imageBytes = getBytes(streamBody.body());
  60. String filename = UrlFormatter.getFilename(url);
  61. long size = imageBytes.length;
  62. String contentType = "image/jpeg";
  63. ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);
  64. UploadingFile uploadingFile = new UploadingFile(filename, size, contentType, inputStream);
  65. UploadedFile uploadedFile = fileUploadService.put(uploadingFile);
  66. /*ImageFileRet imageFileRet = imageFileService.process(uploadedFile);
  67. String imageFileId = imageFileRet.getImageFileId();
  68. String url1 = imageFileRet.getThumbnailUrl();*/
  69. //saveFile(inputStream, new File(String.format("/home/reghao/Downloads/0/%s", filename)));
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. private void saveFile(InputStream in, File file) throws IOException {
  76. File parentDir = file.getParentFile();
  77. if (!parentDir.exists()) {
  78. FileUtils.forceMkdir(parentDir);
  79. }
  80. FileOutputStream fos = new FileOutputStream(file);
  81. // 1MiB
  82. int len = 1024*1024;
  83. byte[] buf = new byte[len];
  84. int readLen;
  85. while ((readLen = in.read(buf, 0, len)) != -1) {
  86. fos.write(buf, 0, readLen);
  87. }
  88. fos.close();
  89. }
  90. private byte[] getBytes(InputStream in) throws IOException {
  91. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  92. // 1MiB
  93. int len = 1024*1024;
  94. byte[] buf = new byte[len];
  95. int readLen;
  96. while ((readLen = in.read(buf, 0, len)) != -1) {
  97. baos.write(buf, 0, readLen);
  98. }
  99. baos.close();
  100. in.close();
  101. return baos.toByteArray();
  102. }
  103. @Test
  104. public void saveLocalVideoFile() throws Exception {
  105. String videoFileId = "wOdK71938E";
  106. String filePath = "/home/reghao/Downloads/mp4/0/video_720.mp4";
  107. saveVideoFile(videoFileId, filePath);
  108. }
  109. private void saveVideoFile(String videoFileId, String filePath) throws Exception {
  110. File file = new File(filePath);
  111. String filename = file.getName();
  112. long size = file.length();
  113. String contentType = "video/mp4";
  114. InputStream inputStream = new FileInputStream(file);
  115. UploadingFile uploadingFile = new UploadingFile(filename, size, contentType, inputStream);
  116. UploadedFile fileRet = fileUploadService.put(uploadingFile);
  117. String fileId = fileRet.getFileId();
  118. int width = 1280;
  119. int height = 720;
  120. MediaResolution mediaResolution = MediaQuality.getQuality(width, height);
  121. VideoUrl videoUrl = new VideoUrl(videoFileId, fileId, VideoUrlType.mp4.getName(),
  122. width, height, mediaResolution.getQuality());
  123. videoUrlMapper.save(videoUrl);
  124. }
  125. @Autowired
  126. FileInfoMapper fileInfoMapper;
  127. @Autowired
  128. FileUrlMapper fileUrlMapper;
  129. @Autowired
  130. VideoFileMapper videoFileMapper;
  131. @Autowired
  132. VideoUrlMapper videoUrlMapper;
  133. /**
  134. * 检查 FileInfo 和 FileUrl 的一致性
  135. * FileInfo 和 FileUrl 是 one-to-many 关系
  136. *
  137. * @param
  138. * @return
  139. * @date 2022-08-14 下午2:30
  140. */
  141. @Test
  142. public void fileTest() {
  143. int i = 0;
  144. List<FileInfo> list = fileInfoMapper.findAll();
  145. for (FileInfo fileInfo : list) {
  146. String fileId = fileInfo.getFileId();
  147. List<FileUrl> fileUrls = fileUrlMapper.findByFileId(fileId);
  148. if (fileUrls.size() == 0) {
  149. log.error("{} 没有 FileUrl", fileId);
  150. } else if (fileUrls.size() > 1) {
  151. log.error("{} 有 {} 个 FileUrl", fileId, fileUrls.size());
  152. }
  153. log.info("{}", i++);
  154. }
  155. }
  156. @Test
  157. public void videoFileTest() {
  158. int i = 0;
  159. List<FileUrl> list = fileUrlMapper.findAllVideoUrl();
  160. for (FileUrl fileUrl : list) {
  161. String fileId = fileUrl.getFileId();
  162. VideoUrl videoUrl = videoUrlMapper.findByFileId(fileId);
  163. if (videoUrl != null) {
  164. String videoFileId = videoUrl.getVideoFileId();
  165. videoUrlMapper.updateSetUrl(fileId, fileUrl.getUrl());
  166. VideoFile videoFile = videoFileMapper.findByVideoFileId(videoFileId);
  167. if (videoFile == null) {
  168. log.error("{} 没有 VideoFile", fileId);
  169. }
  170. } else {
  171. log.error("{} 没有 VideoUrl", fileId);
  172. }
  173. log.info("{}", i++);
  174. }
  175. }
  176. IdGenerator idGenerator = new IdGenerator("image-file-id");
  177. @Test
  178. public void imageFileTest() {
  179. int i = 0;
  180. List<FileUrl> list = fileUrlMapper.findAllImageUrl();
  181. for (FileUrl fileUrl : list) {
  182. String fileId = fileUrl.getFileId();
  183. log.error("{} 没有 ImageUrl", fileId);
  184. log.info("{}", i++);
  185. }
  186. }
  187. @Test
  188. public void videoFileTest1() {
  189. int i = 0;
  190. List<VideoFile> videoFiles = videoFileMapper.findAll();
  191. for (VideoFile videoFile : videoFiles) {
  192. String coverUrl = videoFile.getCoverUrl();
  193. log.error("{} 没有 ImageUrl", videoFile.getVideoFileId());
  194. //log.info("{}", i++);
  195. }
  196. }
  197. }