-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
FileController가 어떻게 적혔는지 좀 더 확인해보고싶습니다.
22.01.06 17:24 작성 조회수 154
0
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변을 작성해보세요.
0
송자바코딩
지식공유자2022.01.07
안녕하세요 koyoungil97 개발자님,
제가 가지고 있는 소스를 올려드릴게요.
조금 달라졌을수도 있지만, 아마 비슷한 소스일거에요,
만약에 다른부분이있거나 컴파일 에러나는 소스가 있다면
처음엔 힘들지만, 응용해서 수정하시거나 추가하셔서 해결해보시면 스킬업에 도움이되실수도있어요
package kr.co.songjava.mvc.controller;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import kr.co.songjava.configuration.GlobalConfig;
import kr.co.songjava.configuration.exception.BaseException;
import kr.co.songjava.configuration.http.BaseResponse;
import kr.co.songjava.configuration.http.BaseResponseCode;
import kr.co.songjava.mvc.parameter.UploadFileParameter;
import kr.co.songjava.mvc.service.UploadFileService;
@RestController
@RequestMapping("/file")
@Api(tags = "파일 API")
public class FileController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private GlobalConfig config;
@Autowired
private UploadFileService uploadFileService;
/**
* 업로드 리턴.
*
* @return
*/
@PostMapping("/save")
@ApiOperation(value = "업로드", notes = "")
public BaseResponse<Boolean> save(@RequestParam("uploadFile") MultipartFile multipartFile) {
logger.debug("multipartFile : {}", multipartFile);
if (multipartFile == null || multipartFile.isEmpty()) {
throw new BaseException(BaseResponseCode.DATA_IS_NULL);
}
// 날짜폴더를 추가
String currentDate = new SimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime());
String uploadFilePath = config.getUploadFilePath() + currentDate + "/";
logger.debug("uploadFilePath : {}", uploadFilePath);
String prefix = multipartFile.getOriginalFilename().substring(
multipartFile.getOriginalFilename().lastIndexOf(".") + 1, multipartFile.getOriginalFilename().length());
String filename = UUID.randomUUID().toString() + "." + prefix;
logger.info("filename : {}", filename);
File folder = new File(uploadFilePath);
// 폴더가 없다면 생성
if (!folder.isDirectory()) {
folder.mkdirs();
}
String pathname = uploadFilePath + filename;
String resourcePathname = config.getUploadResourcePath() + currentDate + "/" + filename;
File dest = new File(pathname);
logger.debug("dest : {}", dest);
try {
multipartFile.transferTo(dest);
// 파일업로드 된 후 DB에 저장
UploadFileParameter parameter = new UploadFileParameter();
// 컨텐츠 종류
parameter.setContentType(multipartFile.getContentType());
// 원본파일명
parameter.setOriginalFilename(multipartFile.getOriginalFilename());
// 저장파일명
parameter.setFilename(filename);
// 실제파일 저장경로
parameter.setPathname(pathname);
// 파일크기
parameter.setSize((int) multipartFile.getSize());
// static resource 접근 경로
parameter.setResourcePathname(resourcePathname);
uploadFileService.save(parameter);
} catch (IllegalStateException | IOException e) {
logger.error("e", e);
}
return new BaseResponse<Boolean>(true);
}
}
globals-local.properties 는 로컬환경에서 필요한 프로퍼티 정보를 정의한것이며,
만약에 개발서버 운영서버등 환경이 추가되는경우는
globals-dev, globals-prod 등으로 만들어서 local과 동일한 key에 값을 넣어서 사용하시면 됩니다.
영상을 중간중간 편집하다보니 소스가 잘린거같네요,
이 영상과 소스가 기초이해하는데 도움이 되시길 바랍니다.^^
답변 1