From 14c0a2bfd1092f68865ceb1f68118e8ccf02dd14 Mon Sep 17 00:00:00 2001 From: pierresomny Date: Fri, 5 Apr 2024 13:33:41 +0200 Subject: [PATCH] fix(bucket-gcs): upload image working Signed-off-by: Pierre SOMNY <113438729+pierresomny@users.noreply.github.com> --- pom.xml | 22 +++++------- .../exception/BadRequestException.java | 2 ++ .../exception/FileWriteException.java | 2 ++ .../exception/GCPFileUploadException.java | 2 ++ .../exception/InvalidFileTypeException.java | 2 ++ .../schoolapp/utils/DataBucketUtil.java | 35 +++++++++---------- 6 files changed, 32 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 75156be..f986128 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 com.sfeir-open-source @@ -20,7 +20,6 @@ 3.11.0 1.18.30 0.2.0 - 26.0.0 2.13.0 0.8.11 2.35.0 @@ -61,6 +60,13 @@ commons-io ${commons-io.version} + + + net.bytebuddy + byte-buddy + 1.14.13 + + com.google.cloud google-cloud-storage @@ -100,18 +106,6 @@ - - - - com.google.cloud - libraries-bom - ${librairies-bom.version} - pom - import - - - - school-app-docker diff --git a/src/main/java/com/sfeiropensource/schoolapp/exception/BadRequestException.java b/src/main/java/com/sfeiropensource/schoolapp/exception/BadRequestException.java index 5693caa..fda8524 100644 --- a/src/main/java/com/sfeiropensource/schoolapp/exception/BadRequestException.java +++ b/src/main/java/com/sfeiropensource/schoolapp/exception/BadRequestException.java @@ -1,7 +1,9 @@ package com.sfeiropensource.schoolapp.exception; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class BadRequestException extends RuntimeException { diff --git a/src/main/java/com/sfeiropensource/schoolapp/exception/FileWriteException.java b/src/main/java/com/sfeiropensource/schoolapp/exception/FileWriteException.java index 5fcba08..e5a6f8f 100644 --- a/src/main/java/com/sfeiropensource/schoolapp/exception/FileWriteException.java +++ b/src/main/java/com/sfeiropensource/schoolapp/exception/FileWriteException.java @@ -1,7 +1,9 @@ package com.sfeiropensource.schoolapp.exception; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class FileWriteException extends RuntimeException { diff --git a/src/main/java/com/sfeiropensource/schoolapp/exception/GCPFileUploadException.java b/src/main/java/com/sfeiropensource/schoolapp/exception/GCPFileUploadException.java index 894fa04..c970bbf 100644 --- a/src/main/java/com/sfeiropensource/schoolapp/exception/GCPFileUploadException.java +++ b/src/main/java/com/sfeiropensource/schoolapp/exception/GCPFileUploadException.java @@ -1,7 +1,9 @@ package com.sfeiropensource.schoolapp.exception; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class GCPFileUploadException extends RuntimeException { diff --git a/src/main/java/com/sfeiropensource/schoolapp/exception/InvalidFileTypeException.java b/src/main/java/com/sfeiropensource/schoolapp/exception/InvalidFileTypeException.java index b813982..d7ee0b7 100644 --- a/src/main/java/com/sfeiropensource/schoolapp/exception/InvalidFileTypeException.java +++ b/src/main/java/com/sfeiropensource/schoolapp/exception/InvalidFileTypeException.java @@ -1,7 +1,9 @@ package com.sfeiropensource.schoolapp.exception; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class InvalidFileTypeException extends RuntimeException { diff --git a/src/main/java/com/sfeiropensource/schoolapp/utils/DataBucketUtil.java b/src/main/java/com/sfeiropensource/schoolapp/utils/DataBucketUtil.java index 6dca572..7b10104 100644 --- a/src/main/java/com/sfeiropensource/schoolapp/utils/DataBucketUtil.java +++ b/src/main/java/com/sfeiropensource/schoolapp/utils/DataBucketUtil.java @@ -9,10 +9,10 @@ import com.sfeiropensource.schoolapp.exception.GCPFileUploadException; import com.sfeiropensource.schoolapp.exception.InvalidFileTypeException; import com.sfeiropensource.schoolapp.model.FileDto; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.utility.RandomString; import org.apache.commons.io.FileUtils; import org.apache.coyote.BadRequestException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; @@ -20,13 +20,12 @@ import java.io.File; import java.io.FileOutputStream; -import java.io.InputStream; +import java.util.concurrent.ThreadLocalRandom; +@Slf4j @Component public class DataBucketUtil { - private static final Logger LOGGER = LoggerFactory.getLogger(DataBucketUtil.class); - @Value("${gcp.config.file}") private String gcpConfigFile; @@ -44,26 +43,24 @@ public FileDto uploadFile(MultipartFile multipartFile, String fileName, String c try { - LOGGER.debug("Start file uploading process on GCS"); + log.debug("Start file uploading process on GCS"); byte[] fileData = FileUtils.readFileToByteArray(convertFile(multipartFile)); - InputStream inputStream = new ClassPathResource(gcpConfigFile).getInputStream(); - - StorageOptions options = StorageOptions.newBuilder().setProjectId(gcpProjectId) - .setCredentials(GoogleCredentials.fromStream(inputStream)).build(); + GoogleCredentials credentials = GoogleCredentials.fromStream(new ClassPathResource(gcpConfigFile).getInputStream()); + Storage storage = StorageOptions.newBuilder().setCredentials(credentials).setProjectId(gcpProjectId).build().getService(); + Bucket bucket = storage.get(gcpBucketId); - Storage storage = options.getService(); - Bucket bucket = storage.get(gcpBucketId, Storage.BucketGetOption.fields()); - Blob blob = bucket.create(gcpDirectoryName + "/" + fileName + "-[replace by random ID]" + checkFileExtension(fileName), fileData, contentType); + RandomString id = new RandomString(6, ThreadLocalRandom.current()); + Blob blob = bucket.create(gcpDirectoryName + "/" + id.nextString() + checkFileExtension(fileName), fileData, contentType); if (blob != null) { - LOGGER.debug("File successfully uploaded to GCS"); + log.debug("File successfully uploaded to GCS"); return new FileDto(blob.getName(), blob.getMediaLink()); } } catch (Exception e) { - LOGGER.error("An error occurred while uploading data. Exception: ", e); + log.error("An error occurred while uploading data. Exception: ", e); throw new GCPFileUploadException("An error occurred while storing data to GCS"); } throw new GCPFileUploadException("An error occurred while storing data to GCS"); @@ -79,7 +76,7 @@ private File convertFile(MultipartFile file) { FileOutputStream outputStream = new FileOutputStream(convertedFile); outputStream.write(file.getBytes()); outputStream.close(); - LOGGER.debug("Converting multipart file : {}", convertedFile); + log.debug("Converting multipart file : {}", convertedFile); return convertedFile; } catch (Exception e) { throw new FileWriteException("An error has occurred while converting the file"); @@ -88,16 +85,16 @@ private File convertFile(MultipartFile file) { private String checkFileExtension(String fileName) { if (fileName != null && fileName.contains(".")) { - String[] extensionList = {".png", ".jpeg", ".pdf", ".doc", ".mp3"}; + String[] extensionList = {".png", ".jpeg", ".jpg", ".pdf", ".doc", ".mp3"}; for (String extension : extensionList) { if (fileName.endsWith(extension)) { - LOGGER.debug("Accepted file type : {}", extension); + log.debug("Accepted file type : {}", extension); return extension; } } } - LOGGER.error("Not a permitted file type"); + log.error("Not a permitted file type"); throw new InvalidFileTypeException("Not a permitted file type"); } }