Day35

두윤기·2023년 2월 16일
0

가상화 ?

파일 송신

> FILE I/O application.properties setting(외부 설정)

* spring.servlet.multipart.enabled=true
* spring.servlet.multipart.max-file-size=1MB
* spring.servlet.multipart.max-request-size=10MB

> POST방식

  • get방식
    • 용량제한 때문에 파일 전송 불가능
    • 이름만 전송

post

  • 용량제한 없는 전송방식이지만, 별다른 property를 적용하지 않으면 파일 이름만 전송
  • Encoding Type
    • <Tag>form의 <property>enctype
      <form action="" method="post" enctype="value">
    • application/x-www-form-urlencoded
      • 기본 방식
      • (key, value) 형태, 파일과 같이 data의 크기 클 때는 전송 어렵다
      • [ 이름, 크기, 유형, 실제 파일 data ]
    • multipart/form-data
      • 구분선(boundary) 그어 data 나눠서 보냄
        -------------------------2131654645612636
      • 파일 전송 시 사용
  • input type
    • <Tag>input의 <property> type="file"
    • <Tag>input의 <property> accept
      <input type="file" accept=".png, .gif, .jpg">
      • MEME(media type) type : "image/*"

multiple file 송신

  • <Tag>input <property> multiple
    <input type="file" name="fileList" multiple>
  • Controller에서 받을 때 배열이나 List로 수신
  public String join(@ReqeustParam MultipartFile[] fileList)
 //
  public String join(@RequestParam List<MultipartFile> fileList)



file 수신

  • 파일 수신은 PostMapping
  • 전송된 파일은 MultipartFile 형태로 수신
  • 파일 수신 및 business logic 수행 후 반드시 redirect(새로고침 시 재 업로드 방지)
  • (주의) 파일을 전송하지 않아도 attach는 null이 아니므로 추가 검사(attach.isEmpty())

> MultipartFile method

.getOriginalFilename()

  • 수신 파일 이름

.getContentType()

  • 수신 파일 확장자

.getSize()

  • 수신 파일 크기(byte 단위)

> controller

    System.out.println("name: " + file.getName());
    System.out.println("original file name: " + attach.getOriginalFilename());
    System.out.println("content type: " + attach.getContentType());
    System.out.println("size: " + attach.getSize());
    System.out.println("file isEmpty: " + attach.isEmpty());
    return "redirect:/";

MIME type

대분류/소분류

파일 저장

> 파일 정보(DATABASE)

파일 정보 TABLE

CREATE TABLE ATTACHMENT(
  ATTACHMENT_NO NUBMER DEFAULT SYSDATE PRIMARY KEY,
  ATTACHMENT_NAME VARCHAR2(256) NOT NULL,
  ATTACHMENT_TYPE VARCHAR2(60) NOT NULL,
  ATTACHMENT_SIZE NUMBER NOT NULL
);

CREATE SEQUENCE ATTACHMENT_SEQ;

> 파일 내용(저장소)

> 연결 TABLE

CREATE TABLE POCKETMON_IMAGE(
  POCKETMON_NO NOT NULL REFERENCES POCKETMON(NO) ON DELETE CASCADE,
  ATTACHMENT_NO NOT NULL REFERENCES ATTACHMENT(ATTACHMENT_NO) ON DELETE CASCADE
--  PRIMARY KEY(POCKETMON_NO, ATTACHMENT_NO)
);

첨부파일 정보 저장

연결 관계 저장

파일 여러 개 보내기

profile
programmerD

0개의 댓글

관련 채용 정보