package com.takensoft.common.file.web; import com.takensoft.common.file.service.FileService; import com.takensoft.common.file.vo.FileVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartRequest; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * @author : 방선주 * @since : 2024.05.23 * * File 관련 컨트롤러 */ @RestController @RequiredArgsConstructor @Slf4j @RequestMapping(value="/sys/file") public class FileController { private final FileService fileService; /** * @author 방선주 * @since 2024.05.21 * @param fileId * @return * @throws Exception * * 게시판 첨부 파일 다운로드 */ @PostMapping("/fileDownload.json") public void fileDownload(@RequestBody int fileId, HttpServletResponse response) throws Exception { // 파일 정보 조회 FileVO file = fileService.fileSelectOne(fileId); File downloadFile = null; // 받은 파일 정보로 파일 다운로드 생성 if(file != null){ String filePath = file.getAbsltPath(); downloadFile = new File(filePath); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(file.getFileNm(), "UTF-8") + "\""); response.setHeader("Content-Transfer-Encoding", "binary"); try (OutputStream out = response.getOutputStream(); FileInputStream fis = new FileInputStream(downloadFile)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } } } } @PostMapping("/postImageUpload.file") public Map handleFileUpload(@RequestPart("upload") MultipartFile file) throws Exception { Map response = new HashMap<>(); String uploadPath = fileService.editorUploadImg(file); response.put("upload", true); response.put("url", uploadPath); return response; } }