- fileupload.yml
spring:
servlet:
multipart:
enabled: true
max-file-size: 10MB
max-request-size: 10MB
file:
upload-dir: "경로"
- application.yml
10번 라인 추가
spring:
application:
name: project-api
profiles:
active: local
config:
import:
- config/database.yml
- config/security.yml
- config/fileupload.yml
cache:
type: simple
- FileUploadMultipartServcie.java
/**
* MultipartFile을 이용한 파일 업로드 구현
*/
@Service
@Slf4j
public class FileUploadMultipartService {
@Value("${file.upload-dir}")
private String uploadDir;
public List<String> uploadFiles(ArrayList<MultipartFile> files) throws IOException {
List<String> uploadedFileNames = new ArrayList<>();
// 업로드 디렉터리가 없으면 생성
Path uploadPath = Paths.get(uploadDir);
if (!Files.exists(uploadPath)) {
Files.createDirectories(uploadPath);
}
for (MultipartFile file : files) {
// 고유한 파일 이름 생성
String originalFilename = file.getOriginalFilename();
String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
String uniqueFilename = UUID.randomUUID().toString() + fileExtension;
// 파일 저장
Path filePath = uploadPath.resolve(uniqueFilename);
Files.copy(file.getInputStream(), filePath);
uploadedFileNames.add(uniqueFilename);
}
return uploadedFileNames;
}
}
- FileUploadController
@Slf4j
@RestController
@RequestMapping("/files/upload")
public class FileUploadController {
private final String EP_ADD_FILES_MULTIPART = "/multipart";
@Autowired
private FileUploadMultipartService fileUploadMultipartService;
@PostMapping(value = EP_ADD_FILES_MULTIPART, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public BaseResponse<List<String>> uploadFile(@RequestParam("files") ArrayList<MultipartFile> files) {
BaseResponse response = new BaseResponse();
try {
List<String> fileNames = fileUploadMultipartService.uploadFiles(files);
response.setResult(fileNames);
return response;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
- 실행 결과
'Web' 카테고리의 다른 글
[springboot] Multipart로 비동기 파일 업로드 (0) | 2024.06.29 |
---|---|
[springboot] 설정 클래스 알아보기 (0) | 2024.06.18 |
[springboot] 10가지 응답처리 방식 (동기, 비동기 및 스트리밍 응답) (0) | 2024.06.11 |
[springboot] Spring Security 6.x로 소셜 로그인 구현하기 (oauth2) (1) | 2024.06.08 |
[springboot] Spring Security 6.x로 로그인 구현하기 (jwt 인증) (0) | 2024.06.05 |