package utils import ( "encoding/binary" "hash/fnv" "io" "mime/multipart" "os" ) func FileHashFromUpload(file multipart.File) (string, error) { h := fnv.New64a() if _, err := io.Copy(h, file); err != nil { return "", err } return u64ToString(h.Sum64()), nil } func FileHash(path string) (string, error) { f, err := os.Open(path) if err != nil { return "", err } defer f.Close() h := fnv.New64a() if _, err := io.Copy(h, f); err != nil { return "", err } return u64ToString(h.Sum64()), nil } func u64ToString(x uint64) string { var b [8]byte binary.LittleEndian.PutUint64(b[:], x) return string(b[:]) }