diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java index cc192436e7..f51f83d2f0 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ImageService.java @@ -44,7 +44,7 @@ public interface ImageService { TbImageDeleteResult deleteImage(TbResourceInfo imageInfo, boolean force); - TbResourceInfo findImageByTenantIdAndEtag(TenantId tenantId, String etag); + TbResourceInfo findSystemOrTenantImageByEtag(TenantId tenantId, String etag); boolean replaceBase64WithImageUrl(HasImage entity, String type); boolean replaceBase64WithImageUrl(Dashboard dashboard); diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java index dc8f072c91..2d27919e1f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseImageService.java @@ -259,8 +259,8 @@ public class BaseImageService extends BaseResourceService implements ImageServic } @Override - public TbResourceInfo findImageByTenantIdAndEtag(TenantId tenantId, String etag) { - return resourceInfoDao.findByTenantIdAndEtag(tenantId, ResourceType.IMAGE, etag); + public TbResourceInfo findSystemOrTenantImageByEtag(TenantId tenantId, String etag) { + return resourceInfoDao.findSystemOrTenantImageByEtag(tenantId, ResourceType.IMAGE, etag); } @Transactional(propagation = Propagation.NOT_SUPPORTED)// we don't want transaction to rollback in case of an image processing failure @@ -417,10 +417,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic String extension = ImageUtils.mediaTypeToFileExtension(mdMediaType); byte[] imageData = Base64.getDecoder().decode(base64Data); String etag = calculateEtag(imageData); - var imageInfo = findImageByTenantIdAndEtag(tenantId, etag); - if (imageInfo == null && !tenantId.isSysTenantId()) { - imageInfo = findImageByTenantIdAndEtag(TenantId.SYS_TENANT_ID, etag); - } + var imageInfo = findSystemOrTenantImageByEtag(tenantId, etag); if (imageInfo == null) { TbResource image = new TbResource(); image.setTenantId(tenantId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceInfoDao.java index 6cfc7eaa94..d18ced319e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceInfoDao.java @@ -40,5 +40,5 @@ public interface TbResourceInfoDao extends Dao { List findByTenantIdAndEtagAndKeyStartingWith(TenantId tenantId, String etag, String query); - TbResourceInfo findByTenantIdAndEtag(TenantId tenantId, ResourceType resourceType, String etag); + TbResourceInfo findSystemOrTenantImageByEtag(TenantId tenantId, ResourceType resourceType, String etag); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceInfoDao.java index 32934e8854..038aedcf28 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceInfoDao.java @@ -106,7 +106,7 @@ public class JpaTbResourceInfoDao extends JpaAbstractDao findByTenantIdAndEtagAndResourceKeyStartingWith(UUID tenantId, String etag, String query); @Query(value = "SELECT * FROM resource r WHERE (r.tenant_id = :systemTenantId OR r.tenant_id = :tenantId) AND r.resource_type = :resourceType AND r.etag = :etag LIMIT 1", nativeQuery = true) - TbResourceInfoEntity findByTenantIdAndEtag(@Param("systemTenantId") UUID sysTenantId, - @Param("tenantId") UUID tenantId, - @Param("resourceType") String resourceType, - @Param("etag") String etag); + TbResourceInfoEntity findSystemOrTenantImageByEtag(@Param("systemTenantId") UUID sysTenantId, + @Param("tenantId") UUID tenantId, + @Param("resourceType") String resourceType, + @Param("etag") String etag); } diff --git a/ui-ngx/src/app/shared/components/image/image-gallery.component.ts b/ui-ngx/src/app/shared/components/image/image-gallery.component.ts index f821a42c33..af223e8563 100644 --- a/ui-ngx/src/app/shared/components/image/image-gallery.component.ts +++ b/ui-ngx/src/app/shared/components/image/image-gallery.component.ts @@ -259,7 +259,7 @@ export class ImageGalleryComponent extends PageComponent implements OnInit, OnDe } } else { this.gridImagesFilter = { - search: isNotEmptyStr(value) ? encodeURI(value) : null, + search: isNotEmptyStr(value) ? value.trim() : null, includeSystemImages: this.includeSystemImages }; this.cd.markForCheck(); diff --git a/ui-ngx/src/app/shared/import-export/import-export.service.ts b/ui-ngx/src/app/shared/import-export/import-export.service.ts index 1a06739adb..09a0042306 100644 --- a/ui-ngx/src/app/shared/import-export/import-export.service.ts +++ b/ui-ngx/src/app/shared/import-export/import-export.service.ts @@ -111,8 +111,7 @@ export class ImportExportService { this.imageService.exportImage(type, key).subscribe( { next: (imageData) => { - let name = imageData.title; - name = name.toLowerCase().replace(/\W/g, '_'); + const name = imageData.fileName.split('.')[0]; this.exportToPc(imageData, name); }, error: (e) => {