diff options
| author | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 17:01:32 +0000 |
|---|---|---|
| committer | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 17:01:32 +0000 |
| commit | 6df68cb970c6ec2d57a6d68fb901df70b67693bf (patch) | |
| tree | 1b53efd58b754184d6743d757abb0479c6e7a87d /app/handler.go | |
| parent | bac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2 (diff) | |
| download | http-server-go-6df68cb970c6ec2d57a6d68fb901df70b67693bf.tar.gz http-server-go-6df68cb970c6ec2d57a6d68fb901df70b67693bf.zip | |
codecrafters submit [skip ci]
Diffstat (limited to 'app/handler.go')
| -rw-r--r-- | app/handler.go | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/app/handler.go b/app/handler.go index 50de29f..02f4b27 100644 --- a/app/handler.go +++ b/app/handler.go @@ -43,7 +43,7 @@ func userAgentHandler(request *Request) *Response { }, []byte(header)) } -func fileHandler(request *Request) *Response { +func getFile(request *Request) *Response { file, err := os.Open(filepath.Join(directory, strings.Split(request.Target(), "/")[2])) if err != nil { return NewResponse(NotFound, nil, nil) @@ -56,12 +56,37 @@ func fileHandler(request *Request) *Response { }, buf) } +func createFile(request *Request) *Response { + fPath := filepath.Join(directory, strings.Split(request.Target(), "/")[2]) + fmt.Println("create file: ", fPath) + + file, err := os.Create(fPath) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + defer file.Close() + + length, err := strconv.Atoi(request.Header("Content-Length")) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + _, err = io.CopyN(file, request.Body(), int64(length)) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + return NewResponse(Created, nil, nil) +} + func Register(builder *RouterBuilder) { builder.Add("GET", regexp.MustCompile("^/$"), basePathHandler) builder.Add("GET", regexp.MustCompile("^/echo/[a-zA-Z]+$"), echoHandler) builder.Add("GET", regexp.MustCompile("^/user-agent$"), userAgentHandler) if directory != "" { - builder.Add("GET", regexp.MustCompile("^/files/.+$"), fileHandler) + builder.Add("GET", regexp.MustCompile("^/files/.+$"), getFile) + builder.Add("POST", regexp.MustCompile("^/files/.+$"), createFile) } } |