58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"git.jmbit.de/jmb/scanfile/server/internal/database"
|
|
"git.jmbit.de/jmb/scanfile/server/internal/processing"
|
|
"git.jmbit.de/jmb/scanfile/server/internal/utils"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func SubmitRestHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodPost {
|
|
http.Error(w, "Only POST allowed", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
err := r.ParseMultipartForm(viper.GetInt64("web.maxfilesizemb") * 1024 * 1024)
|
|
if err != nil {
|
|
slog.Error("Error parsing form in SubmitRestHandler", "error", err)
|
|
utils.WriteJSONError(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
fileData, fileHeader, err := r.FormFile("file")
|
|
if err != nil {
|
|
slog.Error("Error parsing form in SubmitRestHandler", "error", err)
|
|
utils.WriteJSONError(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
fileBytes, err := io.ReadAll(fileData)
|
|
if err != nil {
|
|
slog.Error("Error reading file in SubmitRestHandler", "error", err)
|
|
utils.WriteJSONError(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
file, err := database.CreateFile(r.Context(), fileHeader.Filename, fileBytes)
|
|
if err != nil {
|
|
slog.Error("Error saving file in SubmitRestHandler", "error", err)
|
|
utils.WriteJSONError(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
err = processing.Submit(r.Context(), file.ID)
|
|
w.Header().Set("Content-Type", "application/json")
|
|
enc := json.NewEncoder(w)
|
|
enc.SetIndent("", " ")
|
|
w.WriteHeader(http.StatusOK)
|
|
err = enc.Encode(file)
|
|
if err != nil {
|
|
slog.Error("Error creating json encoder in SubmitRestHandler", "error", err)
|
|
utils.WriteJSONError(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
}
|