From 2d05843c287da773a737a23fff2c3f641ec0c74c Mon Sep 17 00:00:00 2001 From: benny Date: Sun, 16 Jun 2024 16:13:19 +0300 Subject: [PATCH] working on the upload from --- .gitignore | 3 +- html/uploadfile.html | 14 +++++++ main.go | 89 +++++++++++++++++++++++++++++++++++--------- 3 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 html/uploadfile.html diff --git a/.gitignore b/.gitignore index 6b43255..5fdba2d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ Logs/ *.exe progs.db tmpdir/ -.vscode/ \ No newline at end of file +.vscode/ +data/ \ No newline at end of file diff --git a/html/uploadfile.html b/html/uploadfile.html new file mode 100644 index 0000000..27c8ed6 --- /dev/null +++ b/html/uploadfile.html @@ -0,0 +1,14 @@ +{{define "body"}} + +
+

Upload a File

+
+
+ + +
+ +
+
+ +{{end}} \ No newline at end of file diff --git a/main.go b/main.go index 0603e01..dfd0006 100644 --- a/main.go +++ b/main.go @@ -6,13 +6,14 @@ import ( "database/sql" "fmt" "html/template" + "io" "log" "net/http" "os" "strings" "time" - _ "modernc.org/sqlite" // Importing SQLite driver for database interaction. + _ "modernc.org/sqlite" // Importing SQLite driver for database interaction. ) // readHtml function reads an HTML file and applies a CSS template to it before sending it to the client. @@ -213,6 +214,54 @@ func fullSearchPackagesDB(sqldb *sql.DB) []packages { } return pkgs } +func uploadFileForServer(sqldb *sql.DB, lang string) http.Handler{ + return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + pageDataFromDatabase := elements{ + Title: getMsgFromDB(sqldb, "title", lang), + Header: getMsgFromDB(sqldb, "header", lang), + Help: getMsgFromDB(sqldb, "help", lang), + Packagename: getMsgFromDB(sqldb, "packagename", lang), + Packageversion: getMsgFromDB(sqldb, "packageversion", lang), + Allow: getMsgFromDB(sqldb, "allow", lang), + Warning: getMsgFromDB(sqldb, "warning", lang), + Explain: getMsgFromDB(sqldb, "explain", lang), + } + data := struct { + BodyClass string + ElementsData elements + Lang string + }{ + ElementsData: pageDataFromDatabase, + BodyClass: "", + Lang: lang, + + } + templates, err := template.ParseFiles("html/master.html", "html/uploadfile.html") + if err != nil { + log.Println(err) + } + err = templates.ExecuteTemplate(res, "master", data) + if err != nil { + log.Println(err) + } + // upload(res, req) + res.WriteHeader(http.StatusOK) + }) +} +func upload() http.Handler { + return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request){ + file, header, _ := req.FormFile("myFile") + req.ParseMultipartForm(10000000<<20) + defer file.Close() + filename := header.Filename + tempFile, _ :=os.CreateTemp("Data",header.Filename) + defer tempFile.Close() + fileBytes,_:=io.ReadAll(file) + tempFile.Write(fileBytes) + fn,_:=os.OpenFile("Data/"+filename, os.O_CREATE, 0666) + fn.Write(fileBytes) + fn.Close() +})} // index creates an HTTP handler that serves the main page with data from the database. // sqldb: The database connection object. @@ -235,23 +284,25 @@ func index(sqldb *sql.DB, lang string) http.Handler { ElementsData elements PackagesData []packages Lang string - }{ - ElementsData: pageDataFromDatabase, - BodyClass: "", - PackagesData: queryPacks(sqldb, &pageDataFromDatabase), - Lang: lang, - } - templates, err := template.ParseFiles("html/master.html", "html/main.html") - - if err != nil { - log.Println(err) - } - err = templates.ExecuteTemplate(res, "master", data) - if err != nil { - log.Println(err) - } - res.WriteHeader(http.StatusOK) - }) + }{ + ElementsData: pageDataFromDatabase, + BodyClass: "", + PackagesData: queryPacks(sqldb, &pageDataFromDatabase), + Lang: lang, + } + templates, err := template.ParseFiles("html/master.html", "html/main.html") + + if err != nil { + log.Println(err) + } + err = templates.ExecuteTemplate(res, "master", data) + if err != nil { + log.Println(err) + } + + res.WriteHeader(http.StatusOK) + + }) } @@ -276,6 +327,8 @@ func main() { mux.Handle("/", index(db, "heb")) mux.Handle("/en", index(db, "eng")) mux.Handle("/stats", stats(db,"eng")) + mux.Handle("/up", uploadFileForServer(db,"eng")) + mux.Handle("/upload",upload()) addr := fmt.Sprintf(":%s", "12312") server := http.Server{ Addr: addr,