[GO] Serving Files

타키탸키·2022년 11월 10일
0

GO-WEB

목록 보기
5/11
  • io.WriteString을 통해 Response에 사진 보내기
    • HTML <img> tag 사용
    • io.WriteString"만" 사용하여 업로드 하는 것은 외부 사진(url)만 가능
      • 디스크에 저장된 사진은 엑박 처리된다
// 외부 이미지 - O
io.WriteString(w, `
	<!-- not serving from our server -->
	<img src="https://upload.wikimedia.org/wikipedia/commons/6/6e/Golde33443.jpg">
`)

// 디스크 이미지 - X
io.WriteString(w, `
	<!-- image doesn't serve -->
    <!--  절대 경로 -->
	<img src="/dog.jpg">
`)

단일 파일 제공하기

  • io.Copy로 사진 업로드
    • Reader(src)를 Writer(response)로 복사하는 함수
    • 절차
      • 사진의 경로(/...jpg)에 대한 handler 생성
      • os.Open을 통해 기존 파일에 대한 객체 생성(open)
      • 파일 stream 종료를 지연시킨다
      • io.Copy의 인자로 ResponseWriter와 생성한 파일 stream을 넘긴다
  • ServeContent로 사진 업로드
    • stat 메소드로 얻은 FileInfo 구조체의 필드 사용
      • 파일 이름, 마지막 수정 시간
    • 추가로 ResponseWriter와 *Request, 실제 파일을 필요로 함
    • 잘 사용되지 않음
      • 파일에 대한 세부적인 제어가 필요할 때 사용
  • ServeFile으로 사진 업로드
    • 인자로 ResponseWriter와 *Request, 파일 이름을 필요로 함
    • ServeContent에 비해 간단하게 사용 가능

여러 파일 제공하기

  • .FileServer
    • http 패키지 메서드
    • file server를 제공한다
      • 특정 디렉토리의 여러 파일을 가져올 수 있다
    • FileSystem 인터페이스를 인자로 받는다
      • open 메서드 구현 필요
    • handler를 반환하므로 Handle 메서드의 인자로 사용 가능
    • 브라우저에서 특정 파일을 요청하면 디렉토리에서 해당 파일을 찾아 제공한다
  • .Dir
    • http 패키지 메서드
    • FileSystem 인터페이스를 구현한다
    • 특정 디렉토리를 열어 내부 파일에 접근할 수 있도록 한다
  • .StripPrefix
    • http 패키지 메서드
    • url 내에서 지정된 prefix를 제거하여 파일 이름만을 가져올 수 있도록 돕는 함수
    • 특정 directory 내 파일만을 가져올 수 있도록 돕는다
      • 공유하고 싶지 않은 코드를 공유하지 않을 수 있도록 돕는다
      • 코드 영역을 분리하여 제공
    • ex:) /resource/dog.jpg에서 /resource를 제거하여 서버 내의 디렉토리에서 파일명과 일치하는 파일을 가져온다
      • index 페이지에서 모든 파일을 공개할 필요가 없다
      • 하위 url(/dog)을 설정해서 파일을 공개할 필요가 없다
  • 정적 파일 서버 만들기
    • .ListenAndServe 함수의 handler로 .FileServer의 반환값을 넘긴다
    • Dir로 지정한 디렉토리에 index.html이 존재하면 정적 웹 페이지를 띄운다
      • index.html이 존재하지 않으면 디렉토리의 모든 내용을 띄운다
    • redirect
      • 하나의 웹 페이지에 대해 하나 이상의 URL을 부여하는 것
      • URL 포워딩
  • .NotFoundHandler
    • http 패키지 메서드
    • 404 page not found 응답을 반환하는 함수
    • 존재하지 않는 리소스에 대한 요청을 처리하기 위한 함수
      • ex:) favicon
    • HandlerFuncNotFound를 감싸고 있는 형태
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글