Compare commits

..

2 Commits

Author SHA1 Message Date
ccc7a027ca add docker stuff 2024-09-18 22:13:25 +03:00
d00280d549 do this shit 2024-09-18 22:11:43 +03:00
5 changed files with 79 additions and 1 deletions

2
.gitignore vendored
View File

@ -20,4 +20,4 @@
# Go workspace file # Go workspace file
go.work go.work
files/

13
Dockerfile Normal file
View File

@ -0,0 +1,13 @@
FROM golang:1.20-alpine
RUN apk add --no-cache git
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main .
EXPOSE 48723
CMD ["./main"]

8
compose.yml Normal file
View File

@ -0,0 +1,8 @@
services:
web:
build: .
ports:
- "48723:48723"
volumes:
- /mnt/storage/files:/app/files
restart: unless-stopped

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module fzorb.xyz/filehandler
go 1.23.1

54
server.go Normal file
View File

@ -0,0 +1,54 @@
package main
import (
"fmt"
"io"
"math/rand"
"net/http"
"os"
"path/filepath"
)
func uploadFile(wr http.ResponseWriter, rq *http.Request) {
fmt.Println("File Upload Endpoint Hit")
err := rq.ParseMultipartForm(128 << 20)
if err != nil {
http.Error(wr, "Unable to parse form", http.StatusBadRequest)
return
}
// Retrieve the uploaded file using the form field `myFile`
file, handler, er := rq.FormFile("file")
if er != nil {
http.Error(wr, "Error getting the file", http.StatusBadRequest)
return
}
if handler.Size > 128<<20 {
http.Error(wr, "Max file size is 128mb.", http.StatusRequestEntityTooLarge)
return
}
defer file.Close()
fname := fmt.Sprintf("%d%s", rand.Intn(1000000), filepath.Ext(handler.Filename))
destPath := filepath.Join("./files", fname)
destFile, er := os.Create(destPath)
if er != nil {
http.Error(wr, "OOPSIE WOOPSIE!! Uwu We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!", http.StatusInternalServerError)
return
}
defer destFile.Close()
_, er = io.Copy(destFile, file)
if er != nil {
http.Error(wr, "OOPSIE WOOPSIE!! Uwu We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!", http.StatusInternalServerError)
return
}
fmt.Fprintf(wr, "Success! Your file should now be accessible here: https://files.fzorb.xyz/%s\n", fname)
fmt.Printf("File successfully saved to: %s\n", destPath)
}
func main() {
fmt.Println("Server now listening on port 48723")
http.HandleFunc("/upload", uploadFile)
http.ListenAndServe(":48723", nil)
}