작성
·
214
0
답변 1
0
제가 가지고 있는 소스를 올려드릴게요.
조금 달라졌을수도 있지만, 아마 비슷한 소스일거에요,
만약에 다른부분이있거나 컴파일 에러나는 소스가 있다면
처음엔 힘들지만, 응용해서 수정하시거나 추가하셔서 해결해보시면 스킬업에 도움이되실수도있어요
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에 값을 넣어서 사용하시면 됩니다.
영상을 중간중간 편집하다보니 소스가 잘린거같네요,
이 영상과 소스가 기초이해하는데 도움이 되시길 바랍니다.^^