40 lines
635 B
Go
40 lines
635 B
Go
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[:])
|
|
}
|