From 1556bd51287f022697311ff5e8df2fc507da82f3 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Wed, 1 Jan 2020 15:43:59 +0100 Subject: [PATCH] Use hash as file name to de-duplicate uploads --- mediaendpoint.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mediaendpoint.go b/mediaendpoint.go index 9b593ee..281ad4e 100644 --- a/mediaendpoint.go +++ b/mediaendpoint.go @@ -1,9 +1,11 @@ package main import ( + "crypto/sha256" + "fmt" + "io" "net/http" "strings" - "time" ) func HandleMedia(w http.ResponseWriter, r *http.Request) { @@ -34,7 +36,15 @@ func HandleMedia(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("Failed to get file")) return } - fileName := generateRandomString(time.Now(), 15) + hashFile, _, _ := r.FormFile("file") + h := sha256.New() + defer func() { _ = hashFile.Close() }() + if _, err := io.Copy(h, hashFile); err != nil { + w.WriteHeader(http.StatusInternalServerError) + _, _ = w.Write([]byte("Failed to calculate hash of file")) + return + } + fileName := fmt.Sprintf("%x", h.Sum(nil)) mimeType := header.Header.Get("content-type") originalName := header.Filename if strings.Contains(mimeType, "jpeg") || strings.Contains(originalName, ".jpeg") || strings.Contains(originalName, ".jpg") {