Ai
1 Star 0 Fork 0

lurenjia/file_client_go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
unique_algorithm.go 1.52 KB
一键复制 编辑 原始数据 按行查看 历史
lurenjia 提交于 2022-08-31 10:18 +08:00 . 1
// Package client
// @program: file_client_go
// @author: ygt
// @create: 2022/7/25 17:52
package client
import (
"bufio"
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"encoding/hex"
"github.com/cespare/xxhash/v2"
"hash"
"hash/crc32"
"io"
"os"
)
var defaultAlgorithm = getDefault()
type uniqueAlgorithm struct{}
var (
Ic = newIC()
)
func newIC() iu {
return &uniqueAlgorithm{}
}
type iu interface {
GetStringIdentifier(src string) string
GetFileIdentifier(file string) string
}
func (i *uniqueAlgorithm) GetStringIdentifier(src string) string {
if "" == src {
return ""
}
algorithm := defaultAlgorithm
var h hash.Hash
switch algorithm {
case XXH:
h = xxhash.New()
break
case MD5:
h = md5.New()
break
case SHA1:
h = sha1.New()
break
case SHA256:
h = sha256.New()
break
case CRC32:
h = crc32.NewIEEE()
break
}
h.Write([]byte(src))
return hex.EncodeToString(h.Sum(nil))
}
func (i *uniqueAlgorithm) GetFileIdentifier(file string) string {
f, err := os.Open(file)
if err != nil {
return ""
}
algorithm := defaultAlgorithm
defer f.Close()
r := bufio.NewReader(f)
var h hash.Hash
switch algorithm {
case XXH:
h = xxhash.New()
break
case MD5:
h = md5.New()
break
case SHA1:
h = sha1.New()
break
case SHA256:
h = sha256.New()
break
case CRC32:
h = crc32.NewIEEE()
break
}
_, err = io.Copy(h, r)
if err != nil {
return ""
}
return hex.EncodeToString(h.Sum(nil))
}
func getDefault() string {
ua := os.Getenv("F_UNIQUE_ALGORITHM")
if "" == ua {
ua = XXH
}
return ua
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lurenjia528/file_client_go.git
git@gitee.com:lurenjia528/file_client_go.git
lurenjia528
file_client_go
file_client_go
1a3fe9117fee

搜索帮助