import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
@RestController
@Tag(name="Swagger upload", description = "upload")
@RequestMapping("/upload/*")
public class ImageUpload {
// 파일 업로드 경로
final Path FILE_ROOT = Paths.get("./").toAbsolutePath().normalize();
private String uploadPath = FILE_ROOT.toString() + "/upload/image/";
@Operation(summary = "이미지 업로드 ", description = "이미지를 서버에 업로드한다.")
@PostMapping("/imageUpload")
public ResponseEntity<?> imageUpload(@RequestParam MultipartFile file) throws Exception{
try {
// 업로드 파일의 이름
String originalFileName = file.getOriginalFilename();
// 업로드 파일의 확장자
String fileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));
// 업로드 된 파일이 중복될 수 있어서 파일 이름 재설정
String reFileName = UUID.randomUUID().toString() + fileExtension;
// 업로드 경로에 파일명을 변경하여 저장
file.transferTo(new File(uploadPath, reFileName));
// 파일이름을 재전송
return ResponseEntity.ok(reFileName);
}catch (Exception e) {
e.printStackTrace();
return ResponseEntity.badRequest().body("업로드 에러");
}
}
@Operation(summary = "파일 삭제 ", description = "서버에 저장된 파일을 삭제한다.")
@PostMapping("/imageDelete")
public void imageDelete(@RequestParam String file) throws Exception{
try {
Path path = Paths.get(uploadPath, file);
Files.delete(path);
}catch (Exception e) {
e.printStackTrace();
}
}
@Operation(summary = "첨부파일 다운로드 ", description = "첨부된 파일을 다운로드한다.")
@GetMapping("/downloadFile/{filePath}")
public void readFileResource(@PathVariable String filePath, HttpServletResponse response) throws Exception{
File downloadFile=new File(uploadPath + filePath);
byte fileByte[]= FileUtils.readFileToByteArray(downloadFile);
response.setContentType("application/octet-stream");
response.setContentLength(fileByte.length);
response.setHeader("Content-Disposition","attachment;fileName=\""+ URLEncoder.encode(filePath,"UTF-8")+"\";");
response.setHeader("Content-Transfer-Encoding","binary");
response.getOutputStream().write(fileByte);
response.getOutputStream().flush();
response.getOutputStream().close();
}
}
SpringBoot 환경에서 구현한 파일업로드 및 삭제, 다운로드 기능이다
이미지 업로드라고 적어놨지만 다 가능하다
## application.properties 설정
# file upload
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
'개발 > Java' 카테고리의 다른 글
[JAVA] Thumbnails을 이용한 ImageUpload resize 적용하기 (0) | 2024.07.16 |
---|---|
[JAVA] CPU , Memory , Disk 사용량 확인하기 (0) | 2024.07.09 |
[JAVA] 파일 생성, 삭제, 쓰기, 이름변경, 이동, 복사, 읽기 하기 (1) | 2024.05.21 |
[JAVA] REST API 구현하기(API KEY) - Postman 이용 (0) | 2023.09.07 |
[Java] JDBC Connection - 자바와 DB 연결하기 (0) | 2023.06.08 |
댓글