From 271a3579a15ffd9e2f306808f413f7c882bb9209 Mon Sep 17 00:00:00 2001 From: jiangyong Date: Fri, 20 Mar 2026 17:10:59 +0800 Subject: [PATCH] stat --- .gitignore | 1 + storage/minio.go | 16 ++++++++++++++++ storage/qiniu.go | 16 ++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/.gitignore b/.gitignore index 0ed3f20..79e270e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ test go.sum pkg test.go +.claude diff --git a/storage/minio.go b/storage/minio.go index 367a58b..40a30f3 100644 --- a/storage/minio.go +++ b/storage/minio.go @@ -149,6 +149,10 @@ func (s *Minio) Stat(objectName string) (*ObjectInfo, error) { objectName = strings.TrimLeft(objectName, "/ ") stat, err := s.client.StatObject(s.config.Bucket, objectName, minio.StatObjectOptions{}) if err != nil { + // 文件不存在不算错误,返回 nil, nil + if isMinioNotFound(err) { + return nil, nil + } log.Errorf("stat object from minio error:%s", err.Error()) return nil, err } @@ -162,6 +166,18 @@ func (s *Minio) Stat(objectName string) (*ObjectInfo, error) { 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 { if err := s.Init(); err != nil { return err diff --git a/storage/qiniu.go b/storage/qiniu.go index 2791b36..997976a 100644 --- a/storage/qiniu.go +++ b/storage/qiniu.go @@ -191,6 +191,10 @@ func (s *Qiniu) Stat(objectName string) (*ObjectInfo, error) { bucketManager := storage.NewBucketManager(mac, &cfg) fileInfo, err := bucketManager.Stat(s.config.Bucket, objectName) if err != nil { + // 文件不存在不算错误,返回 nil, nil + if isQiniuNotFound(err) { + return nil, nil + } return nil, err } @@ -202,6 +206,18 @@ func (s *Qiniu) Stat(objectName string) (*ObjectInfo, error) { 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 { if len(local) > 0 && local[0] == true { return s.fetchLocal(url, objectName)