From 58ceae9708e936f429d49785869df0c75a81ed43 Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Tue, 16 Sep 2025 10:35:30 +0800 Subject: [PATCH] fix(uploader): failed to generate upload token for some file types (#2847) (#2900) * fix(mime): `mimeType` not assigned to new value when is empty * fix(mime): add fallback mime type --- pkg/filemanager/driver/cos/cos.go | 4 ++-- pkg/filemanager/driver/ks3/ks3.go | 4 ++-- pkg/filemanager/driver/oss/oss.go | 4 ++-- pkg/filemanager/driver/qiniu/qiniu.go | 4 ++-- pkg/filemanager/driver/s3/s3.go | 4 ++-- pkg/filemanager/driver/upyun/upyun.go | 4 ++-- pkg/filemanager/fs/mime/mime.go | 8 +++++++- 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/pkg/filemanager/driver/cos/cos.go b/pkg/filemanager/driver/cos/cos.go index 88009953..ddec60d8 100644 --- a/pkg/filemanager/driver/cos/cos.go +++ b/pkg/filemanager/driver/cos/cos.go @@ -244,7 +244,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 是否允许覆盖 @@ -455,7 +455,7 @@ func (handler Driver) Token(ctx context.Context, uploadSession *fs.UploadSession mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 初始化分片上传 diff --git a/pkg/filemanager/driver/ks3/ks3.go b/pkg/filemanager/driver/ks3/ks3.go index 6e2b008f..ddc1c975 100644 --- a/pkg/filemanager/driver/ks3/ks3.go +++ b/pkg/filemanager/driver/ks3/ks3.go @@ -219,7 +219,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } _, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ @@ -399,7 +399,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 创建分片上传 diff --git a/pkg/filemanager/driver/oss/oss.go b/pkg/filemanager/driver/oss/oss.go index b2d2c0a7..737820ec 100644 --- a/pkg/filemanager/driver/oss/oss.go +++ b/pkg/filemanager/driver/oss/oss.go @@ -240,7 +240,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 是否允许覆盖 @@ -450,7 +450,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 初始化分片上传 diff --git a/pkg/filemanager/driver/qiniu/qiniu.go b/pkg/filemanager/driver/qiniu/qiniu.go index bc185c1f..06b37ba3 100644 --- a/pkg/filemanager/driver/qiniu/qiniu.go +++ b/pkg/filemanager/driver/qiniu/qiniu.go @@ -223,7 +223,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } err = resumeUploader.CompleteParts(ctx, upToken, upHost, nil, handler.policy.BucketName, @@ -389,7 +389,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } uploadSession.UploadID = ret.UploadID diff --git a/pkg/filemanager/driver/s3/s3.go b/pkg/filemanager/driver/s3/s3.go index c8a6a292..05c41c6e 100644 --- a/pkg/filemanager/driver/s3/s3.go +++ b/pkg/filemanager/driver/s3/s3.go @@ -207,7 +207,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } _, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ @@ -344,7 +344,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } // 创建分片上传 diff --git a/pkg/filemanager/driver/upyun/upyun.go b/pkg/filemanager/driver/upyun/upyun.go index f0a5e5b3..895548bf 100644 --- a/pkg/filemanager/driver/upyun/upyun.go +++ b/pkg/filemanager/driver/upyun/upyun.go @@ -161,7 +161,7 @@ func (handler *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } err := handler.up.Put(&upyun.PutObjectConfig{ @@ -309,7 +309,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio mimeType := file.Props.MimeType if mimeType == "" { - handler.mime.TypeByName(file.Props.Uri.Name()) + mimeType = handler.mime.TypeByName(file.Props.Uri.Name()) } return &fs.UploadCredential{ diff --git a/pkg/filemanager/fs/mime/mime.go b/pkg/filemanager/fs/mime/mime.go index 751fd5c5..b5482296 100644 --- a/pkg/filemanager/fs/mime/mime.go +++ b/pkg/filemanager/fs/mime/mime.go @@ -36,5 +36,11 @@ func (d *mimeDetector) TypeByName(p string) string { return m } - return mime.TypeByExtension(ext) + m := mime.TypeByExtension(ext) + if m != "" { + return m + } + + // Fallback + return "application/octet-stream" }