21.07.04 [Spring 파일업로드, @Resource]

박종찬·2021년 7월 4일
0

TIL

목록 보기
89/89

클라이언트에서 Form 태그 속성에 enctype = "multipart/form-data" method="post"를 해야 파일을 업로드할 수 있다

파일 업로드를 위해서, commons-fileupload를 dependency를 추가해야 한다

그리고 servlet-context.xml에 빈을 등록해야한다

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<beans:property name="maxUploadSize" value="100000000" />
</beans:bean>

파일 업로드 처리

  • Request header에 파일을 저장
  • WAS의 multipartResolver에서 먼저 받음
  • Apache, file-upload.jar을 통해 파일(MultipartFile)을 객체로 만들어 Controller로 받는다
    • @RequestPart("fileUpload") List<MultipartFile> fileUpload
      • List는 파일이 하나도 없더라도 CommonsMultipartFile이 리턴함
      • List에 값이 하나도 없는 경우를 물어볼땐 MultipartFile.isEmpty()로 물어본다
      • 또는 fileList.get(0).isEmpty()로 체크한다
  • 파일 저장 시 같은 이름이 덮어쓰는 것을 방지하기 위해 UUID_파일 이름으로 저장
    • UUID.randomUUID()
  • MultipartFile의 transferTo 메소드와 File 클래스를 통해 서버 디렉토리에 저장된다
    @Component
    public class FileSaveHelper {
    	@Resource(name = "saveDir")
    	private String saveDir;
    	
    	public String save(MultipartFile file) {
    		String savedFileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
    		
    		try {
    			file.transferTo(new File(saveDir + savedFileName));
    		} catch (Exception e) {
    		
    		}
    		
    		return savedFileName;
    	}
    }
  • saveDir은 root-context나 관련 context에 으로 등록한다
    <bean id="saveDir" class="java.lang.String">
    		<constructor-arg value="d:/upload/" />
    </bean>

@Resource

@Autowired는 객체의 타입이 일치하는 객체를 DI 시킨다

하지만 @Resource는 빈에 등록된 ID(이름)를 찾아 DI시킨다

profile
반가워요! 사람을 도우는 웹 개발자로 성장하기! :)

0개의 댓글