当前位置: 首页 > news >正文

徐家汇网站建设秦皇岛海港区防疫人员事件

徐家汇网站建设,秦皇岛海港区防疫人员事件,事业圈app哪家公司开发的,广东门户网站建设【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版 保存分享文件到个人网盘代码分析 一、代码结构概览 该代码实现了一个将他人分享的文件保存到自己网盘的功能,主要分为三个部分: 控制器层(Controller&a…

【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版

保存分享文件到个人网盘代码分析

一、代码结构概览

该代码实现了一个将他人分享的文件保存到自己网盘的功能,主要分为三个部分:

  1. 控制器层(Controller):处理HTTP请求和响应
  2. 服务层(Service):实现核心业务逻辑
  3. 递归方法:处理目录结构的深度复制

二、控制器层分析

saveShare 方法

@RequestMapping("/saveShare")
@GlobalInterceptor(checkParams = true, checkLogin = false)
public ResponseVO saveShare(HttpSession session,@VerifyParam(required = true) String shareId,@VerifyParam(required = true) String shareFileIds,@VerifyParam(required = true) String myFolderId) {// 验证分享有效性SessionShareDto shareSessionDto = checkShare(session, shareId);// 获取当前用户信息SessionWebUserDto webUserDto = getUserInfoFromSession(session);// 防止自分享操作if (shareSessionDto.getShareUserId().equals(webUserDto.getUserId())) {throw new BusinessException("自己分享的文件无法保存到自己的网盘");}// 调用服务层保存逻辑fileInfoService.saveShare(shareSessionDto.getFileId(), shareFileIds, myFolderId, shareSessionDto.getShareUserId(), webUserDto.getUserId());return getSuccessResponseVO(null);
}

三、服务层分析

saveShare 方法

@Override
public void saveShare(String shareRootFilePid, String shareFileIds, String myFolderId, String shareUserId, String currentUserId) {// 分割文件ID列表String[] shareFileIdArray = shareFileIds.split(",");// 查询目标文件夹现有文件(用于重名检查)FileInfoQuery fileInfoQuery = new FileInfoQuery();fileInfoQuery.setUserId(currentUserId);fileInfoQuery.setFilePid(myFolderId);List<FileInfo> currentFileList = this.fileInfoMapper.selectList(fileInfoQuery);// 构建文件名映射表Map<String, FileInfo> currentFileMap = currentFileList.stream().collect(Collectors.toMap(FileInfo::getFileName, Function.identity(), (data1,data2)->data2));// 查询待保存的分享文件列表fileInfoQuery = new FileInfoQuery();fileInfoQuery.setUserId(shareUserId);fileInfoQuery.setFileIdArray(shareFileIdArray);List<FileInfo> shareFileList = this.fileInfoMapper.selectList(fileInfoQuery);// 准备拷贝文件列表List<FileInfo> copyFileList = new ArrayList<>();Date curDate = new Date();// 处理每个待保存文件for (FileInfo item : shareFileList) {// 处理重名文件FileInfo haveFile = currentFileMap.get(item.getFileName());if (haveFile != null) {item.setFileName(StringTools.rename(item.getFileName()));}// 递归处理文件/目录findAllSubFile(copyFileList, item, shareUserId, currentUserId, curDate, myFolderId);}// 批量插入数据库this.fileInfoMapper.insertBatch(copyFileList);
}

四、递归方法分析

findAllSubFile 方法

private void findAllSubFile(List<FileInfo> copyFileList, FileInfo fileInfo, String sourceUserId, String currentUserId, Date curDate, String newFilePid) {// 保存原始文件ID(用于目录查询)String sourceFileId = fileInfo.getFileId();// 更新文件元信息fileInfo.setCreateTime(curDate);fileInfo.setLastUpdateTime(curDate);fileInfo.setFilePid(newFilePid);fileInfo.setUserId(currentUserId);// 生成新文件IDString newFileId = StringTools.getRandomString(Constants.LENGTH_10);fileInfo.setFileId(newFileId);// 添加到拷贝列表copyFileList.add(fileInfo);// 如果是目录则递归处理子文件if (FileFolderTypeEnums.FOLDER.getType().equals(fileInfo.getFolderType())) {FileInfoQuery query = new FileInfoQuery();query.setFilePid(sourceFileId);query.setUserId(sourceUserId);List<FileInfo> sourceFileList = this.fileInfoMapper.selectList(query);for (FileInfo item : sourceFileList) {findAllSubFile(copyFileList, item, sourceUserId, currentUserId, curDate, newFileId);}}
}

五、安全性和可靠性设计

  1. 参数校验

    • 使用@VerifyParam确保必要参数非空
    • 通过checkShare验证分享有效性
  2. 数据隔离

    • 严格区分shareUserIdcurrentUserId
    • 所有查询都带有用户ID条件
  3. 异常处理

    • 自分享操作抛出明确业务异常
    • 潜在的数据库异常由全局异常处理器捕获
  4. 幂等性设计

    • 重名文件自动重命名
    • 使用新ID避免冲突
http://www.dtcms.com/a/558679.html

相关文章:

  • 长沙专业网站建设服务网站代备
  • 开始改变第七天 第一个面试
  • 网站资源做缓存做网站开发需要的笔记本配置
  • 搜索引擎网站盈利模式长沙旅游必去的八个景点
  • 如何写出让业务满意的性能测试报告?
  • 网站做数据分析整站优化seo平台
  • 烟台网站建设服务网站百度搜索不到
  • 做网站除了dw网站域名注册备案教程
  • 南华大学城市建设学院网站注册企业邮箱哪家最好
  • C++隐藏机制——extern 的边界:声明、定义与符号分配
  • 为什么选择做游戏网站做国外销售都上什么网站
  • C语言完成Socket通信
  • 关于Delphi的一次吵架的后续
  • 深圳网站制作公司兴田德润官网多少中企动力为什么留不住人
  • 怎样制造网站图片教程手机建站源码
  • 视频网站建设流程vps 内存影响 网站
  • 网站内容规划ssh做的大型网站
  • 网站正则表达式怎么做怎么样才能自己做网站打广告
  • 快速部署远程vnc桌面 -docker部署
  • 网站建设运行状况做网站需要服务器还是主机
  • 网站信息核验单南充二手房最新出售信息
  • 开发 网站 团队建设摩托车官网官方网站
  • 易经风水传承者【谷晟阳】
  • 自己做培训需要网站吗甘肃建设厅网站注入
  • 网站自行备案成都附近旅游景区哪里好玩
  • wordpress 注册登陆插件外贸seo是什么意思啊
  • 网站开发调查问卷电影片头在线制作网站
  • 网站制作公司小邓管理咨询公司工作简报
  • 做一个网站多长时间专门做悬疑推理小说的阅读网站
  • 网站图片像素多少上海优化网站