echo
프레임워크로 파일 업로더 서버를 구축했다.
쿡북에서 단일 파일, 여러 파일을 업로드하는 예제가 있어 이를 바탕으로 쉽게 만들 수 있었다.
하지만 업로드를 하는 클라이언트에서 폼의 키값을 다른 것으로 하는 경우를 고려해야 했다.
그래서 여러 파일을 업로드하는 코드를 참고하여 입맛에 맞게 수정했다.
func upload(c echo.Context) error {
form, err := c.MultipartForm()
if err != nil {
return err
}
for _, file := range form.File {
// Source
src, err := file[0].Open()
if err != nil {
return err
}
defer src.Close()
// Destination
dst, err := os.Create(file[0].Filename)
if err != nil {
return err
}
defer dst.Close()
// Copy
if _, err = io.Copy(dst, src); err != nil {
return err
}
}
}
그리고 용량이 큰 파일을 업로드하는 경우에 디스크 사용량이 파일 사이즈의 2배가 늘어났다.
원인을 찾아보니 go
에서 설정한 메모리(32 MB + 10MB)보다 큰 경우 /tmp/
에 파일을 저장하고 있었다.
다음과 같이 하면 파일을 원하는 곳에 복사한 다음 임시 파일을 모두 제거할 수 있다.
func upload(c echo.Context) error {
defer func() {
form, err := ctx.MultipartForm()
if err != nil {
return
}
form.RemoveAll()
}()
...
}
참고 문헌
'Golang' 카테고리의 다른 글
[Golang] 쿼리 실행할 때 타임아웃 설정하기 (0) | 2020.09.03 |
---|---|
[Golang] too many open files 에러 해결 (0) | 2020.08.06 |
[Golang] 커맨드 명령 동시 실행 및 디렉토리 제거 (0) | 2020.07.02 |
[Golang] Go의 선(The Zen of Go) (0) | 2020.06.04 |
[Golang] Kafka 연동 문제 (0) | 2020.04.30 |