[go] net/http 패키지를 사용한 빠른 파일 전송 구현
이 글에서는 Go 언어의 net/http
패키지를 사용하여 파일을 빠르고 안전하게 전송하는 방법을 알아볼 것이다.
웹 서버 설정
먼저, 파일 전송을 위한 간단한 웹 서버를 설정하자. 다음 코드에서는 /upload
경로에 handleFileUpload
함수를 할당하여 파일을 받고, /files/
로 시작하는 모든 요청은 http.FileServer
를 통해 파일을 제공한다.
package main
import (
"net/http"
)
func handleFileUpload(w http.ResponseWriter, r *http.Request) {
// 파일 업로드 처리
}
func main() {
http.HandleFunc("/upload", handleFileUpload)
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("uploads"))))
http.ListenAndServe(":8080", nil)
}
파일 업로드 처리
다음으로, 파일을 업로드하는 handleFileUpload
함수를 작성해야 한다. 요청에서 파일을 읽고, 원하는 경로에 저장하는 방법은 다음과 같다.
func handleFileUpload(w http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(10 << 20) // 최대 10MB 파일 크기
file, handler, err := r.FormFile("file")
if err != nil {
// 에러 처리
return
}
defer file.Close()
// 파일 저장
}
파일 다운로드
또한, 웹 서버에서 파일을 다운로드 받기 위해서는 URL 경로에 따라 파일을 제공해야 한다. 위에서 설정한 /files/
경로에 파일이 있을 경우, 해당 파일을 클라이언트에게 제공한다.
func main() {
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("uploads"))))
http.ListenAndServe(":8080", nil)
}
이제 Go 언어의 net/http
패키지를 사용하여 파일 전송을 구현하는 방법을 알았다. 이를 통해 빠르고 안전하게 파일을 전송할 수 있게 되었다.
참고문헌:
- https://golang.org/pkg/net/http/
- https://tutorialedge.net/golang/handling-file-uploads-go/
- https://yourbasic.org/golang/http-file-server/