fix(AliOssController): 根据文件类型修正缩略图和预览图逻辑
- 获取上传文件的 contentType 以判断文件类型 - 图片类型时生成带图片处理参数的缩略图和预览图 - 视频类型时生成视频截帧的缩略图,预览图使用原始 URL - 其他类型文件直接使用原始文件 URL 作为缩略图和预览图 - 避免非图片文件拼接图片处理参数导致显示异常
This commit is contained in:
16
.workbuddy/memory/2026-06-28.md
Normal file
16
.workbuddy/memory/2026-06-28.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# 2026-06-28 工作记录
|
||||
|
||||
## AliOssController 上传接口优化
|
||||
|
||||
**文件**: `src/main/java/com/gxwebsoft/common/system/controller/AliOssController.java`
|
||||
|
||||
**问题**: 上传文件时,无论文件类型如何,都无条件拼接 `?x-oss-process=image/...` 图片处理参数,导致非图片文件的 thumbnail/url 无效。
|
||||
|
||||
**修改内容**:
|
||||
1. 将 `FileServerUtil.getContentType(upload)` 调用移到设置 thumbnail/url 之前
|
||||
2. 根据 contentType 判断文件类型,分别处理:
|
||||
- **图片** (`image/*`): 照常拼接 OSS 图片处理参数(缩略图 100x100 + 预览图 750px宽)
|
||||
- **视频** (`video/*`): 使用 OSS 视频截帧 `?x-oss-process=video/snapshot,t_0,f_jpg,w_100,h_100,m_fast` 生成缩略图
|
||||
- **其他文件**: thumbnail 和 url 直接设为原始文件 URL,不加任何处理参数
|
||||
|
||||
**依赖**: 使用了已有的 `FileServerUtil.isImage(String contentType)` 方法判断图片类型。
|
||||
@@ -155,11 +155,27 @@ public class AliOssController extends BaseController {
|
||||
result.setName(StrUtil.isBlank(originalName) ? upload.getName() : originalName);
|
||||
result.setLength(upload.length());
|
||||
result.setPath(bucketDomain + path);
|
||||
result.setThumbnail(bucketDomain + path + "?x-oss-process=image/resize,m_fixed,w_100,h_100/quality,Q_90");
|
||||
result.setUrl(bucketDomain + path + "?x-oss-process=image/resize,w_750/quality,Q_90");
|
||||
result.setDownloadUrl(bucketDomain + path);
|
||||
|
||||
// 获取文件类型
|
||||
String contentType = FileServerUtil.getContentType(upload);
|
||||
result.setContentType(contentType);
|
||||
|
||||
// 根据文件类型设置缩略图和预览图
|
||||
if (FileServerUtil.isImage(contentType)) {
|
||||
// 图片:生成缩略图和压缩预览图
|
||||
result.setThumbnail(bucketDomain + path + "?x-oss-process=image/resize,m_fixed,w_100,h_100/quality,Q_90");
|
||||
result.setUrl(bucketDomain + path + "?x-oss-process=image/resize,w_750/quality,Q_90");
|
||||
} else if (contentType != null && contentType.startsWith("video/")) {
|
||||
// 视频:使用OSS视频截帧生成缩略图(取首帧)
|
||||
result.setThumbnail(bucketDomain + path + "?x-oss-process=video/snapshot,t_0,f_jpg,w_100,h_100,m_fast");
|
||||
result.setUrl(bucketDomain + path);
|
||||
} else {
|
||||
// 非图片/视频:直接使用原始URL
|
||||
result.setThumbnail(bucketDomain + path);
|
||||
result.setUrl(bucketDomain + path);
|
||||
}
|
||||
|
||||
result.setTenantId(Integer.valueOf(tenantId));
|
||||
upload.delete();
|
||||
fileRecordService.save(result);
|
||||
|
||||
Reference in New Issue
Block a user