diff options
| author | Marin Ivanov <[email protected]> | 2026-01-16 22:27:54 +0200 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-16 22:27:54 +0200 |
| commit | da07b8ded59d6d759856bbc2374f8447232f9c62 (patch) | |
| tree | f5560c22511a3bef029c1e7e018d274dc042d49f /main.go | |
| parent | 56b97bd9bec99aaad3eb19881ee01fe426428231 (diff) | |
publish multiple objects
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 107 |
1 files changed, 67 insertions, 40 deletions
@@ -105,62 +105,89 @@ func (s *Server) createRandomFilename(ext string) (*os.File, string, error) { return f, name, nil } -func (s *Server) formPost(w http.ResponseWriter, r *http.Request) { - r.ParseMultipartForm(10 << 23) // 83MB +func (s *Server) createFile(rd io.Reader, ext string, mimeType string) (string, error) { + f, name, err := s.createRandomFilename(ext) + if err != nil { + return "", fmt.Errorf("createRandomFilename(): %w", err) + } + defer f.Sync() + defer f.Close() + if _, err := io.Copy(f, rd); err != nil { + return "", fmt.Errorf("io.Copy(): %w", err) + } + m := Metadata{ + ContentType: mimeType, + } + if err = s.writeMetadata(name, &m); err != nil { + return "", fmt.Errorf("writeMetadata(): %w", err) + } + return name, nil +} - mimeType := r.Form.Get("mimetype") +func (s *Server) postText(r *http.Request) (string, error) { ext := "" - var datard io.Reader text := r.Form.Get("text") - if strings.TrimSpace(text) == "" { - file, _, err := r.FormFile("file") + mimeType := r.Form.Get("text_mimetype") + + datard := strings.NewReader(text) + if mimeType == "auto" { + mimeType = "text/plain" + ext = "txt" + } + + return s.createFile(datard, ext, mimeType) +} + +func (s *Server) postFile(r *http.Request) (string, error) { + var datard io.Reader + + ext := "" + mimeType := r.Form.Get("file_mimetype") + file, _, err := r.FormFile("file") + if err == nil { + return "", err + } + defer file.Close() + if mimeType == "auto" { + mimeType, ext, datard, err = detectMimetype(file) if err != nil { - log.Print("Error file upload: ", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - defer file.Close() - if mimeType == "auto" { - mimeType, ext, datard, err = detectMimetype(file) - if err != nil { - log.Printf("Failed to detect mimetype. defaulting '%s': %s", DefaultMimeType, err) - mimeType = DefaultMimeType - } - } else { - datard = file + log.Printf("Failed to detect mimetype. defaulting '%s': %s", DefaultMimeType, err) + mimeType = DefaultMimeType } } else { - datard = strings.NewReader(text) - if mimeType == "auto" { - mimeType = "text/plain" - } + datard = file } + return s.createFile(datard, ext, mimeType) +} - f, name, err := s.createRandomFilename(ext) +func (s *Server) formPost(w http.ResponseWriter, r *http.Request) { + r.ParseMultipartForm(10 << 23) // 83MB + + var textLink string + var fileLink string + + textName, err := s.postText(r) if err != nil { - log.Print("createRandomFilename(): ", err) - w.WriteHeader(http.StatusInternalServerError) - } - defer f.Sync() - defer f.Close() - if _, err := io.Copy(f, datard); err != nil { - log.Print("io.Copy(): ", err) - w.WriteHeader(http.StatusInternalServerError) - return + log.Print("Error text upload: ", err) + } else { + textLink = fmt.Sprintf("%s/%s", s.host, textName) } - m := Metadata{ - ContentType: mimeType, + + fileName, err := s.postFile(r) + if err != nil { + log.Print("Error file upload: ", err) + } else { + fileLink = fmt.Sprintf("%s/%s", s.host, fileName) } - if err = s.writeMetadata(name, &m); err != nil { - log.Print("writeMetadata(): ", err) + + if fileName == "" && textName == "" { w.WriteHeader(http.StatusInternalServerError) return } - log.Printf("Created posting: %s", name) - link := fmt.Sprintf("%s/%s\n", s.host, name) tmplData := map[string]string{ - "Link": link, + "TextLink": textLink, + "FileLink": fileLink, } if err := tmpl.ExecuteTemplate(w, "result.html", tmplData); err != nil { w.WriteHeader(http.StatusInternalServerError) |
