This commit is contained in:
jiangyong 2026-03-20 17:10:59 +08:00
parent 0820c34450
commit 271a3579a1
3 changed files with 33 additions and 0 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ test
go.sum go.sum
pkg pkg
test.go test.go
.claude

View File

@ -149,6 +149,10 @@ func (s *Minio) Stat(objectName string) (*ObjectInfo, error) {
objectName = strings.TrimLeft(objectName, "/ ") objectName = strings.TrimLeft(objectName, "/ ")
stat, err := s.client.StatObject(s.config.Bucket, objectName, minio.StatObjectOptions{}) stat, err := s.client.StatObject(s.config.Bucket, objectName, minio.StatObjectOptions{})
if err != nil { if err != nil {
// 文件不存在不算错误,返回 nil, nil
if isMinioNotFound(err) {
return nil, nil
}
log.Errorf("stat object from minio error:%s", err.Error()) log.Errorf("stat object from minio error:%s", err.Error())
return nil, err return nil, err
} }
@ -162,6 +166,18 @@ func (s *Minio) Stat(objectName string) (*ObjectInfo, error) {
return info, nil return info, nil
} }
// isMinioNotFound 检查是否为 MinIO 文件不存在错误
func isMinioNotFound(err error) bool {
if err == nil {
return false
}
// MinIO 返回 NoSuchKey 表示文件不存在
if respErr, ok := err.(minio.ErrorResponse); ok {
return respErr.Code == "NoSuchKey" || respErr.Code == "NotFound"
}
return false
}
func (s *Minio) Fetch(urlStr, objectName string, local ...bool) error { func (s *Minio) Fetch(urlStr, objectName string, local ...bool) error {
if err := s.Init(); err != nil { if err := s.Init(); err != nil {
return err return err

View File

@ -191,6 +191,10 @@ func (s *Qiniu) Stat(objectName string) (*ObjectInfo, error) {
bucketManager := storage.NewBucketManager(mac, &cfg) bucketManager := storage.NewBucketManager(mac, &cfg)
fileInfo, err := bucketManager.Stat(s.config.Bucket, objectName) fileInfo, err := bucketManager.Stat(s.config.Bucket, objectName)
if err != nil { if err != nil {
// 文件不存在不算错误,返回 nil, nil
if isQiniuNotFound(err) {
return nil, nil
}
return nil, err return nil, err
} }
@ -202,6 +206,18 @@ func (s *Qiniu) Stat(objectName string) (*ObjectInfo, error) {
return info, nil return info, nil
} }
// isQiniuNotFound 检查是否为七牛云文件不存在错误
func isQiniuNotFound(err error) bool {
if err == nil {
return false
}
// 七牛云错误码 612 表示文件不存在
if respErr, ok := err.(*storage.ErrorInfo); ok {
return respErr.Code == 612
}
return false
}
func (s *Qiniu) Fetch(url, objectName string, local ...bool) error { func (s *Qiniu) Fetch(url, objectName string, local ...bool) error {
if len(local) > 0 && local[0] == true { if len(local) > 0 && local[0] == true {
return s.fetchLocal(url, objectName) return s.fetchLocal(url, objectName)