From 94c71b10e4d09d565ab39d9f0ad322382bcb1a20 Mon Sep 17 00:00:00 2001 From: wangzhiwei Date: Tue, 6 Jan 2026 10:45:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20uploadOnLineResource=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BB=BB=E4=BD=95=E7=BD=91=E7=BB=9C=E8=B5=84=E6=BA=90URL?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=BF=AE=E5=A4=8D=E7=99=BB=E5=BD=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E8=BF=87=E6=9C=9F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/common/util/helper/LoginHelper.java | 26 +++-- .../system/config/file/FileRecorderImpl.java | 48 ++++++-- .../model/req/uploadOnlineResourceReq.java | 15 +++ .../admin/system/service/FileService.java | 2 + .../system/service/impl/FileServiceImpl.java | 106 ++++++++++++++++++ .../controller/common/CommonController.java | 8 ++ .../main/resources/config/application-dev.yml | 3 +- 7 files changed, 187 insertions(+), 21 deletions(-) create mode 100644 continew-admin-system/src/main/java/top/continew/admin/system/model/req/uploadOnlineResourceReq.java diff --git a/continew-admin-common/src/main/java/top/continew/admin/common/util/helper/LoginHelper.java b/continew-admin-common/src/main/java/top/continew/admin/common/util/helper/LoginHelper.java index 842036f..0d1cdbe 100644 --- a/continew-admin-common/src/main/java/top/continew/admin/common/util/helper/LoginHelper.java +++ b/continew-admin-common/src/main/java/top/continew/admin/common/util/helper/LoginHelper.java @@ -97,17 +97,25 @@ public class LoginHelper { * @return 登录用户信息,未登录时返回null */ public static LoginUser getLoginUserSafely() { - if (!StpUtil.isLogin()) { + try { + if (!StpUtil.isLogin()) { + return null; + } + LoginUser loginUser = (LoginUser)SaHolder.getStorage().get(CacheConstants.LOGIN_USER_KEY); + if (null != loginUser) { + return loginUser; + } + SaSession tokenSession = StpUtil.getTokenSession(); + loginUser = (LoginUser)tokenSession.get(CacheConstants.LOGIN_USER_KEY); + SaHolder.getStorage().set(CacheConstants.LOGIN_USER_KEY, loginUser); + return loginUser; + } catch (NotLoginException e) { + // 捕获未登录异常,返回null + return null; + } catch (Exception e) { + // 捕获其他异常,返回null return null; } - LoginUser loginUser = (LoginUser)SaHolder.getStorage().get(CacheConstants.LOGIN_USER_KEY); - if (null != loginUser) { - return loginUser; - } - SaSession tokenSession = StpUtil.getTokenSession(); - loginUser = (LoginUser)tokenSession.get(CacheConstants.LOGIN_USER_KEY); - SaHolder.getStorage().set(CacheConstants.LOGIN_USER_KEY, loginUser); - return loginUser; } /** diff --git a/continew-admin-system/src/main/java/top/continew/admin/system/config/file/FileRecorderImpl.java b/continew-admin-system/src/main/java/top/continew/admin/system/config/file/FileRecorderImpl.java index 725d392..990785a 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/system/config/file/FileRecorderImpl.java +++ b/continew-admin-system/src/main/java/top/continew/admin/system/config/file/FileRecorderImpl.java @@ -5,12 +5,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.EscapeUtil; import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.x.file.storage.core.FileInfo; import org.dromara.x.file.storage.core.recorder.FileRecorder; import org.dromara.x.file.storage.core.upload.FilePartInfo; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import top.continew.admin.common.model.dto.LoginUser; import top.continew.admin.common.util.helper.LoginHelper; import top.continew.admin.system.enums.FileTypeEnum; import top.continew.admin.system.mapper.FileMapper; @@ -31,12 +32,16 @@ import java.util.Optional; */ @Slf4j @Component -@RequiredArgsConstructor public class FileRecorderImpl implements FileRecorder { - private final FileMapper fileMapper; - private final StorageMapper storageMapper; - private final UserService userService; + @Autowired + private FileMapper fileMapper; + + @Autowired + private StorageMapper storageMapper; + + @Autowired + private UserService userService; @Override public boolean save(FileInfo fileInfo) { @@ -53,16 +58,37 @@ public class FileRecorderImpl implements FileRecorder { file.setThumbnailSize(fileInfo.getThSize()); StorageDO storage = (StorageDO)fileInfo.getAttr().get(ClassUtil.getClassName(StorageDO.class, false)); file.setStorageId(storage.getId()); - if (LoginHelper.getLoginUserSafely() == null) { - UserDO user = userService.getById(StpUtil.getLoginIdAsLong()); - file.setDeptId(user.getDeptId()); + + // 安全获取登录用户信息 + Long userId = 0L; // 默认用户ID + Long deptId = 0L; // 默认部门ID + + LoginUser loginUser = LoginHelper.getLoginUserSafely(); + if (loginUser != null) { + userId = loginUser.getId(); + deptId = loginUser.getDeptId(); } else { - file.setDeptId(LoginHelper.getLoginUserSafely().getDeptId()); + // 尝试通过StpUtil获取登录ID,同时捕获可能的异常 + try { + // 检查是否登录 + if (StpUtil.isLogin()) { + userId = StpUtil.getLoginIdAsLong(); + // 获取用户部门信息 + UserDO user = userService.getById(userId); + if (user != null) { + deptId = user.getDeptId(); + } + } + } catch (Exception e) { + // 捕获所有异常,使用默认值 + log.debug("获取登录用户信息失败: {}", e.getMessage()); + } } - file.setCreateUser(StpUtil.getLoginIdAsLong()); + file.setDeptId(deptId); + file.setCreateUser(userId); file.setCreateTime(DateUtil.toLocalDateTime(fileInfo.getCreateTime())); - file.setUpdateUser(StpUtil.getLoginIdAsLong()); + file.setUpdateUser(userId); file.setUpdateTime(file.getCreateTime()); fileMapper.insert(file); return true; diff --git a/continew-admin-system/src/main/java/top/continew/admin/system/model/req/uploadOnlineResourceReq.java b/continew-admin-system/src/main/java/top/continew/admin/system/model/req/uploadOnlineResourceReq.java new file mode 100644 index 0000000..744cf6c --- /dev/null +++ b/continew-admin-system/src/main/java/top/continew/admin/system/model/req/uploadOnlineResourceReq.java @@ -0,0 +1,15 @@ +package top.continew.admin.system.model.req; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class uploadOnlineResourceReq implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotEmpty(message = "文件URL不能为空") + private String url; +} diff --git a/continew-admin-system/src/main/java/top/continew/admin/system/service/FileService.java b/continew-admin-system/src/main/java/top/continew/admin/system/service/FileService.java index 370b412..f157884 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/system/service/FileService.java +++ b/continew-admin-system/src/main/java/top/continew/admin/system/service/FileService.java @@ -74,4 +74,6 @@ public interface FileService extends BaseService getFilesPage(FileQuery query, PageQuery pageQuery); + FileInfo uploadOnLineResource(String url); + } diff --git a/continew-admin-system/src/main/java/top/continew/admin/system/service/impl/FileServiceImpl.java b/continew-admin-system/src/main/java/top/continew/admin/system/service/impl/FileServiceImpl.java index dc7e2d5..73334a1 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/system/service/impl/FileServiceImpl.java +++ b/continew-admin-system/src/main/java/top/continew/admin/system/service/impl/FileServiceImpl.java @@ -38,6 +38,10 @@ import top.continew.starter.extension.crud.model.query.PageQuery; import top.continew.starter.extension.crud.model.resp.PageResp; import top.continew.starter.extension.crud.service.impl.BaseServiceImpl; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.time.LocalDate; import java.util.Arrays; import java.util.List; @@ -201,6 +205,108 @@ public class FileServiceImpl extends BaseServiceImpl img.size(100, 100)); + } + + uploadPretreatment.setProgressMonitor(new ProgressListener() { + @Override + public void start() { + log.info("开始上传在线资源: {}", url); + } + + @Override + public void progress(long progressSize, Long allSize) { + if (allSize != null) { + log.info("已上传 [{}],总大小 [{}],进度: [{}%]", progressSize, allSize, String + .format("%.2f", (double)progressSize / allSize * 100)); + } else { + log.info("已上传 [{}]", progressSize); + } + } + + @Override + public void finish() { + log.info("上传结束: {}", url); + } + }); + + // 处理本地存储文件 URL + FileInfo fileInfo = uploadPretreatment.upload(); + String domain = StrUtil.appendIfMissing(storage.getDomain(), StringConstants.SLASH); + fileInfo.setUrl(URLUtil.normalize(domain + fileInfo.getPath() + fileInfo.getFilename())); + + return fileInfo; + } + @Override protected void fill(Object obj) { super.fill(obj); diff --git a/continew-admin-webapi/src/main/java/top/continew/admin/controller/common/CommonController.java b/continew-admin-webapi/src/main/java/top/continew/admin/controller/common/CommonController.java index 712960d..2c26162 100644 --- a/continew-admin-webapi/src/main/java/top/continew/admin/controller/common/CommonController.java +++ b/continew-admin-webapi/src/main/java/top/continew/admin/controller/common/CommonController.java @@ -20,6 +20,7 @@ import top.continew.admin.system.model.query.DeptQuery; import top.continew.admin.system.model.query.MenuQuery; import top.continew.admin.system.model.query.OptionQuery; import top.continew.admin.system.model.query.RoleQuery; +import top.continew.admin.system.model.req.uploadOnlineResourceReq; import top.continew.admin.system.model.resp.DeptChildResp; import top.continew.admin.system.model.resp.FileUploadResp; import top.continew.admin.system.service.*; @@ -59,6 +60,13 @@ public class CommonController { return FileUploadResp.builder().url(fileInfo.getUrl()).build(); } + @Operation(summary = "上传文件-将ai生成的网络资源转换成本地资源", description = "上传文件-将ai生成的网络资源转换成本地资源") + @PostMapping("/uploadOnLineResource") + public FileUploadResp upload(@RequestBody @Validated uploadOnlineResourceReq req) { + FileInfo fileInfo = fileService.uploadOnLineResource(req.getUrl()); + return FileUploadResp.builder().url(fileInfo.getUrl()).build(); + } + @Operation(summary = "查询部门树", description = "查询树结构的部门列表") @GetMapping("/tree/dept") public List> listDeptTree(DeptQuery query, SortQuery sortQuery) { diff --git a/continew-admin-webapi/src/main/resources/config/application-dev.yml b/continew-admin-webapi/src/main/resources/config/application-dev.yml index 336ad4f..32c28fd 100644 --- a/continew-admin-webapi/src/main/resources/config/application-dev.yml +++ b/continew-admin-webapi/src/main/resources/config/application-dev.yml @@ -227,9 +227,10 @@ justauth: --- ### Sa-Token 扩展配置 sa-token.extension: - # 安全配置:排除(放行)路径配置 + # 安全获取登录用户信息,如果未登录返回null security.excludes: # 白名单 + - /common/uploadOnLineResource - /consumptionHistory/add - /taskRecordHistory/add - /consumptionHistory/checkBalance