분명 파일 확장자랑 파일 사이즈를 잘 설정 해놨는데도 배포 후 5MB 이하만 들어가는걸 확인했다.
import org.springframework.beans.factory.annotation.Value;
@Slf4j
@Component
public class FileUtil {
public static String salt;
@Value("${file.salt}") // Lombok거 아님!
public void setSalt(String salt) {
FileUtil.salt = salt;
}
private static final String[] ALLOW_FILE_EXT = {
"jpg",
"jpeg",
"png"
};
public static FileInfoDTO getFileInfoDTO(MultipartFile file, String uploadPath) {
if (file == null) return null;
long fileSize = 20 * 1024 * 1024; // 파일 사이즈 설정!
long size = file.getSize();
// 업로드 파일 사이즈 체크
if (size == 0) {
throw new BadRequestException("파일 사이즈가 올바르지 않습니다.");
} else if (size > fileSize)
throw new BadRequestException("파일 사이즈는 " + fileSize + "byte까지 업로드 가능합니다.");
// 기존 파일명
String originFileName = file.getOriginalFilename();
if (originFileName == null) throw new BadRequestException("파일명은 필수입니다.");
// 확장자 제외한 기존 파일명
String originFileNameNotExt = originFileName.substring(0, originFileName.lastIndexOf("."));
// 업로드 파일 확장자 체크
// 파일 확장자
String ext = originFileName.substring(originFileName.lastIndexOf(".") + 1).toLowerCase();
if (Arrays.stream(ALLOW_FILE_EXT).noneMatch(ext::equals))
throw new BadRequestException(String.join(", ", ALLOW_FILE_EXT) + " 파일만 업로드 가능합니다.");
// 업로드 파일명 암호화
String encodedName = SHA256Util.getEncrypt(originFileName + "_" + System.currentTimeMillis(), salt);
// 업로드 파일 경로
String path = uploadPath == null ? "upload/attachments/" + encodedName + "." + ext : uploadPath + "/" + encodedName + "." + ext;
return FileInfoDTO.builder()
.originFileName(originFileNameNotExt)
.encodedName(encodedName)
.path(path)
.ext(ext)
.contentType(file.getContentType())
.size(fileSize)
.build();
}
}
알고보니까 배포를 하고 나면 Nginx에서도 파일 사이즈에 대한 설정을 해줘야한다.
안해주면 기본 Default인 5MB가 된다.
http{
client_max_body_size 10M;
}
추가해주기!