FileService.java

package io.smartir.smartir.website.service;


import io.smartir.smartir.website.config.BeanNames;
import io.smartir.smartir.website.exceptions.UnsupportedImageTypeException;
import io.smartir.smartir.website.utils.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.nio.file.Path;
import java.util.Optional;

@Service
@Slf4j
public class FileService {

    private final Path uploadImagePath;
    private final Path uploadBannerImagePath;

    public FileService(@Qualifier(BeanNames.ARTICLE_IMAGE_UPLOAD_PATH_BEAN_NAME) Path uploadImagePath,
                       @Qualifier(BeanNames.ARTICLE_BANNER_IMAGE_UPLOAD_PATH_BEAN_NAME) Path uploadBannerImagePath) {
        this.uploadImagePath = uploadImagePath;
        this.uploadBannerImagePath = uploadBannerImagePath;
    }

    public Path moveBannerImageFile(MultipartFile multipartFile) throws Exception {
        var fileExt = StringUtils.getFilenameExtension(multipartFile.getOriginalFilename());
        Optional.of(FileUtil.isSupportedImageType(fileExt)).filter(e -> e)
                .orElseThrow(UnsupportedImageTypeException::new);
        var fileName = String.format("%s_%s.%s", fileExt, String.valueOf(System.currentTimeMillis()), fileExt);
        var uploadedFileLocation = uploadBannerImagePath.resolve(fileName.substring(0,17)+"/"+fileName);
        File uploadFile = new File("BannerImage/"+fileName.substring(0,17)+"/");
        uploadFile.mkdir();
        multipartFile.transferTo(uploadedFileLocation);
        return uploadedFileLocation;
    }

    public Path moveImgFile(MultipartFile multipartFile) throws Exception {
        var fileExt = StringUtils.getFilenameExtension(multipartFile.getOriginalFilename());
        Optional.of(FileUtil.isSupportedImageType(fileExt)).filter(e -> e)
                .orElseThrow(UnsupportedImageTypeException::new);
        var fileName = String.format("%s_%s.%s", fileExt, String.valueOf(System.currentTimeMillis()), fileExt);
        var uploadedFileLocation = uploadImagePath.resolve(fileName.substring(0,17)+"/"+fileName);
        File uploadFile = new File("Image/"+fileName.substring(0,17)+"/");
        uploadFile.mkdir();
        multipartFile.transferTo(uploadedFileLocation);
        return uploadedFileLocation;
    }

}