인프런 커뮤니티 질문&답변

koyoungil97님의 프로필 이미지

작성한 질문수

자바 스프링부트 활용 웹개발 실무용

E13 공통 프로젝트 프로퍼티 로컬, 개발, 운영 설정값 클래스로 관리 @PostConstruct 어노테이션 활용

FileController가 어떻게 적혔는지 좀 더 확인해보고싶습니다.

작성

·

213

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
영상에서 보면 클래스가 40번대 줄에서 시작되는걸로 보아 영상에 보이는 @api 어노테이션 위에도 몇가지 어노테이션이 더 있는걸로 예상은 되는데 영상에는 소스가 나오지 않아 영상을 따라가는데 문제가 있습니다 ㅜㅜ
 
그리고 추가로, resources - globals 폴더 내에 세가지 properties 파일을 생성해주셨는데, global-local.properties 외에는 나머지 파일들이 보이지 않아 영상대로 따라기가 어려움이 있습니다!

답변 1

0

송자바코딩님의 프로필 이미지
송자바코딩
지식공유자

안녕하세요 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에 값을 넣어서 사용하시면 됩니다.

영상을 중간중간 편집하다보니 소스가 잘린거같네요,

 

이 영상과 소스가 기초이해하는데 도움이 되시길 바랍니다.^^