파일업로드

Walter Mitty·2023년 2월 6일
0

commit, rollback 알아서 되니까 session.commit안해줘도된다

스프링 컨텍스트 엔진이 AddException이 받고 ControllerAdvice의 AddException용 Handler가 맡아 처리해준다.

파일 여러게 할거면 MultipartFile f1, List<MulripartFile> f2를 파라미터로 했을때프론트에서 전달을 할 때 인풋태그의 타입속을 지정해줘야한다.

<input type="file" name="f1"> // MultipartFile 타입
<input type="file" name="f2" mutiple> // List<MulripartFile> 타입

org.springframework.web.multipart.commons.CommonsMultipartResolver하고 cmd+마우스 올려놨을 때 링크되면 있는거임

maxUploadSize 속성은 total 사이즈 지정
maxUploadSizePerFile 속성은 여러파일이 업로드 될경우 각 파일의 크키

  • form-data 로 Key로는 File 타입을 선택해준다음, select Files를 한다.

https://m.blog.naver.com/javaking75/140203390797


f1을 전달하지 않았을 때,

  • f1이 전달되지 않아서 NullPointException!
  • if문에 조건을 걸어서 넣어준다.

f2를 전달하지 않았을 때

  • List 객체는 있고 그 안에 저장된 요소의 개수가 0이라 NullPointException이 안난다.
    • f2는 있고 mf가 없는 상황

토탈 파일의 maximun 사이즈를 10kb로 줄이고 파일 10kb이상 추가

  • 메소드 내부에 들어오기 전에 매개변수로 매핑할 때 예외가 발생한 것이다.
    • 여기 메서드의 매개변수로 들어오면서 예외 발생!
    • 여기서 발생한 예외는 Container에게 전달이되고, 이 예외는 ControllerAdvice가 다루게된다.
      • ControllerAdvice에 추가
      • 응답 한글 깨짐
      • headers 추가

  • service 주석 풀고 포스트맨 실행-> 에러
  • 메시지 Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property.
    파라미터로 전달된 것 중에 null이 있어! 자바 객체로 쓰이는 null을 db쪽에서는 어떤 값으로 바라볼거야???
    (숫자 기본 자료형은 매핑해줄 마이바티스용 매핑을 통해서 db쪽으로 오게되면 NUMBER자료형이된다. 스트링은 VARCHAR2, char은 char, Date는 Date)
    • Board에서 boardNum, boardTitle, boardContent, boardC
      여기서 boardNum, boardC 기본값인 null로 셋팅되어있다.
      Board 객체를 insert랑 매핑할 때 board_num의 값은 멤버변수 boardNum과
  • board_id는 Board타입이 가지고 있는 boardC.id로 채워질건데 이게 null.id인 상황인데, DB의 값으로 채우려고했을 때 자료형을 어떤걸로 매핑을 해야할지 셋팅이 안되어서 난 에러.
    • 자바 객체의 null을 Null타입으로 셋팅(config.xml)
    • 포스트맨
    • SQL Developer
      • null이 안들어가게 하고싶다면 NOT NULL 제약조건 추가하기
  • id도 같이 보내주면 다 같이 잘 들어감

파일 업로드 백엔드 경로 주고, 프론트는 파일업로드용 js 만들면됨


f1 요청전달자는 있으나 파일이 비어있는 경우,

  • fileSize가 다 0 이다 = 첨부된 파일이 없다.
    • 분기처리

파일 원본파일이름으로 올라가는지 확인


Failed to obtain JDBC Connection; nested exception is 에러

session 클로즈 확인, commit 안했거나

위에 코드에서 아래코드로 변경


프론트단
파일업로드용 ajax

"method": "POST",
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,

필수!

0개의 댓글