- io.WriteString을 통해 Response에 사진 보내기
- HTML
<img>
tag 사용
- io.WriteString"만" 사용하여 업로드 하는 것은 외부 사진(url)만 가능
- 디스크에 저장된 사진은 엑박 처리된다
// 외부 이미지 - O
io.WriteString(w, `
<img src="https://upload.wikimedia.org/wikipedia/commons/6/6e/Golde33443.jpg">
`)
// 디스크 이미지 - X
io.WriteString(w, `
<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 인터페이스를 인자로 받는다
- 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
응답을 반환하는 함수
- 존재하지 않는 리소스에 대한 요청을 처리하기 위한 함수
HandlerFunc
가 NotFound
를 감싸고 있는 형태