dev delete config
Test Workflow / test (push) Waiting to run

This commit is contained in:
vladp
2026-02-16 20:11:06 +07:00
parent a431784baa
commit 5f588fcb30
3 changed files with 29 additions and 44 deletions
@@ -66,36 +66,18 @@ public class ImageFoundRequestHandler implements RequestHandler {
searchResponseYandex = searchImageService.searchReverseByPublicUrl(fileEntity, "yandex_reverse_image", searchResponseYandex = searchImageService.searchReverseByPublicUrl(fileEntity, "yandex_reverse_image",
"visual_matches"); "visual_matches");
log.info("searchResponseYandex OK"); log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
log.info("searchResponseYandex OK");
List<YandexSearchResponse.ImageResult> allYandexImages = searchImageService.getAllImagesWithoutPagination( List<YandexSearchResponse.ImageResult> allYandexImages = searchImageService.getAllImagesWithoutPagination(
searchResponseYandex, "visual_matches"); searchResponseYandex, "visual_matches");
searchResponseGoogle = searchImageService.searchReverseByPublicUrl(fileEntity, "google_lens", searchResponseGoogle = searchImageService.searchReverseByPublicUrl(fileEntity, "google_lens",
"exact_matches"); "exact_matches");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
log.info("searchResponseGoogle OK");
List<YandexSearchResponse.ImageResult> allGoogleImages = searchImageService.getAllImagesWithoutPagination( List<YandexSearchResponse.ImageResult> allGoogleImages = searchImageService.getAllImagesWithoutPagination(
searchResponseGoogle, "exact_matches"); searchResponseGoogle, "exact_matches");
allUniqueImages = searchImageService.removeDuplicateUrls(allYandexImages, allUniqueImages = searchImageService.removeDuplicateUrls(allYandexImages,
allGoogleImages); allGoogleImages);
log.info("allUniqueImages OK"); log.info("allUniqueImages OK");
log.info("allUniqueImages OK");
log.info("allUniqueImages OK");
log.info("allUniqueImages OK");
log.info("allUniqueImages OK");
log.info("allUniqueImages OK");
} catch (TimeoutException e) { } catch (TimeoutException e) {
log.warn("Search timeout for file {}, returning empty results", fileId); log.warn("Search timeout for file {}, returning empty results", fileId);
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
@@ -35,6 +35,8 @@ public class FileSimilarityService {
private final AuthTokenRepository authTokenRepository; private final AuthTokenRepository authTokenRepository;
private final FileEntityRepository fileEntityRepository;
@Value("${server.baseurl}") @Value("${server.baseurl}")
private String baseUrl; private String baseUrl;
@@ -138,7 +140,18 @@ public class FileSimilarityService {
return duplicates; return duplicates;
} }
private final FileEntityRepository fileEntityRepository; public boolean hasDuplicatesByHash(String path, Long userId,String mimeType) throws Exception {
String hash = calculateFileHash(path);
List<FileEntity> fileEntityList = fileEntityRepository.findByUserIdAndMimeType(userId, mimeType);
for (FileEntity file : fileEntityList) {
if (calculateFileHash(file.getFilePath()).equals(hash)) {
return true;
}
}
return false;
}
public Page<SimilarFileDTO> findSimilarFiles(String fileId, SimilarityFilter filter, Pageable pageable, public Page<SimilarFileDTO> findSimilarFiles(String fileId, SimilarityFilter filter, Pageable pageable,
String authToken) throws Exception { String authToken) throws Exception {
@@ -165,12 +178,12 @@ public class FileSimilarityService {
.sorted(Comparator.comparingInt(SimilarFileDTO::getHammingDistance)) .sorted(Comparator.comparingInt(SimilarFileDTO::getHammingDistance))
.collect(Collectors.toList()); .collect(Collectors.toList());
} else { } else {
String hash = calculateFileHash(fileEntity); String hash = calculateFileHash(fileEntity.getFilePath());
Long userId = fileEntity.getUserId(); Long userId = fileEntity.getUserId();
List<FileEntity> fileEntityList = fileEntityRepository.findByUserIdAndMimeType(userId, mimeType); List<FileEntity> fileEntityList = fileEntityRepository.findByUserIdAndMimeType(userId, mimeType);
for (FileEntity file : fileEntityList) { for (FileEntity file : fileEntityList) {
if (calculateFileHash(file).equals(hash)) { if (calculateFileHash(file.getFilePath()).equals(hash)) {
allResults.add(buildDTO(file)); allResults.add(buildDTO(file));
} }
} }
@@ -189,28 +202,15 @@ public class FileSimilarityService {
} }
private String calculateFileHash(FileEntity fileEntity) throws Exception { private String calculateFileHash(String path) throws Exception {
MessageDigest digest = MessageDigest.getInstance("SHA-256"); MessageDigest digest = MessageDigest.getInstance("SHA-256");
// if (fileEntity.getStatus() == FileStatus.CLOUD) { try (InputStream is = new FileInputStream(path)) {
// File tempFile = cloudStorageService.readFileFromStorageByPath(fileEntity.getFilePath()); byte[] buffer = new byte[8192];
// try (InputStream is = new FileInputStream(tempFile)) { int read;
// byte[] buffer = new byte[8192]; while ((read = is.read(buffer)) > 0) {
// int read; digest.update(buffer, 0, read);
// while ((read = is.read(buffer)) > 0) { }
// digest.update(buffer, 0, read);
// }
// } finally {
// tempFile.delete();
// }
// } else {
try (InputStream is = new FileInputStream(fileEntity.getFilePath())) {
byte[] buffer = new byte[8192];
int read;
while ((read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
// }
} }
byte[] hashBytes = digest.digest(); byte[] hashBytes = digest.digest();
@@ -315,8 +315,11 @@ public class FileUploadServiceImpl implements FileUploadService {
String finalFilePath = assembleFileSynchronously(session); String finalFilePath = assembleFileSynchronously(session);
if (!session.getFileType().startsWith("video") && findSimilar == 0) { if (session.getFileType().startsWith("image") && findSimilar == 0) {
checkForDuplicatesSynchronously(finalFilePath); checkForDuplicatesSynchronously(finalFilePath);
} else if (session.getFileType().startsWith("audio") || session.getFileType().startsWith("document")
&& findSimilar == 0) {
fileSimilarityService.hasDuplicatesByHash(finalFilePath, session.getUserId(), session.getFileType());
} }
session.setStatus(UploadStatus.COMPLETED); session.setStatus(UploadStatus.COMPLETED);