From 5d4112fa1bbd47dc6e7b9c0d239e34b020776924 Mon Sep 17 00:00:00 2001 From: hyingbo <1363390067@qq.com> Date: 星期五, 30 五月 2025 17:39:15 +0800 Subject: [PATCH] 添加文件上传下载功能 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java | 78 +++++++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java | 67 +++++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java | 7 + lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java | 34 ++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java | 81 ++++++++++++++++ 5 files changed, 267 insertions(+), 0 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java new file mode 100644 index 0000000..289283b --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/DocInfoController.java @@ -0,0 +1,78 @@ +package org.jeecg.modules.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.system.entity.FileDocInfo; +import org.jeecg.modules.system.service.IDocInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@Api(tags = "鏂囨。琛�") +@RestController +@RequestMapping("/nc/doc") +public class DocInfoController extends JeecgController<FileDocInfo, IDocInfoService> { + @Autowired + private IDocInfoService docInfoService; + + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * @param docInfo + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result<IPage<FileDocInfo>> queryPageList(FileDocInfo docInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result<IPage<FileDocInfo>> result = new Result<IPage<FileDocInfo>>(); + QueryWrapper<FileDocInfo> queryWrapper = QueryGenerator.initQueryWrapper(docInfo, req.getParameterMap()); + Page<FileDocInfo> page = new Page<FileDocInfo>(pageNo, pageSize); + IPage<FileDocInfo> pageList = docInfoService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @AutoLog(value = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛") + @ApiOperation(value = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛", notes = "鏂囨。琛�-瀵煎叆鏂囨。杩涘彛") + @PostMapping("/add") + public Result<?> addDocInfo(@RequestParam("file") MultipartFile file) { + boolean b = docInfoService.addDocInfo(file); + if(!b) + return Result.error("鎿嶄綔澶辫触锛�"); + return Result.ok("鎿嶄綔鎴愬姛锛�"); + } + + @AutoLog(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅") + @ApiOperation(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅", notes = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅") + @DeleteMapping("/delete") + public Result<?> deleteDocInfo(@RequestParam("id") String id) { + boolean b = docInfoService.deleteDocInfo(id); + if(!b) + return Result.error("鎿嶄綔澶辫触锛�"); + return Result.ok("鎿嶄綔鎴愬姛锛�"); + } + + @AutoLog(value = "鏂囦欢琛�-鏂囨。涓嬭浇") + @ApiOperation(value = "鏂囦欢琛�-鏂囨。涓嬭浇", notes = "鏂囦欢琛�-鏂囨。涓嬭浇") + @GetMapping("/download") + public Result<?> downloadDocFile(@RequestParam("id") String id, HttpServletResponse response) { + return docInfoService.downloadDocFile(response, id); + } +} diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java new file mode 100644 index 0000000..fc7eeab --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/FileDocInfo.java @@ -0,0 +1,67 @@ +package org.jeecg.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.util.Date; + +/** + * @Description: 鏂囨。 + * @author clown + */ +@Data +@NoArgsConstructor +@TableName(value = "file_doc_info") +public class FileDocInfo { + + @TableId(value = "id") + private String id; + + /**鏂囦欢鍚嶇О*/ + @Excel(name = "鏂囦欢鍚嶇О", width = 15) + @ApiModelProperty(value = "鏂囦欢鍚嶇О") + private String fileName; + + /**鏂囦欢鍔犲瘑鍚庣殑鍚嶇О*/ + @Excel(name = "鏂囦欢鍔犲瘑鍚庣殑鍚嶇О", width = 15) + @ApiModelProperty(value = "鏂囦欢鍔犲瘑鍚庣殑鍚嶇О") + private String fileEncodeName; + + /**鏂囦欢璺緞*/ + @Excel(name = "鏂囦欢璺緞", width = 15) + @ApiModelProperty(value = "鏂囦欢璺緞") + private String filePath; + + /**鏂囦欢澶у皬*/ + @Excel(name = "鏂囦欢澶у皬", width = 15) + @ApiModelProperty(value = "鏂囦欢澶у皬") + private Long fileSize; + + /**鏂囦欢鍚庣紑*/ + @Excel(name = "鏂囦欢鍚庣紑", width = 15) + @ApiModelProperty(value = "鏂囦欢鍚庣紑") + private String fileSuffix; + + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + @TableField(value = "update_time", fill = FieldFill.UPDATE) + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date updateTime; + @TableField(value = "create_by",fill = FieldFill.INSERT) + @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") + private String createBy; + @TableField(value = "update_by", fill = FieldFill.UPDATE) + @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") + private String updateBy; + @JsonIgnore + @TableLogic + @TableField(value = "delete_flag", select = false) + private Integer deleteFlag = 0; +} diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java new file mode 100644 index 0000000..6260fdc --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/DocInfoMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.FileDocInfo; + +public interface DocInfoMapper extends BaseMapper<FileDocInfo> { +} diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java new file mode 100644 index 0000000..091a506 --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IDocInfoService.java @@ -0,0 +1,34 @@ +package org.jeecg.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.system.entity.FileDocInfo; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public interface IDocInfoService extends IService<FileDocInfo> { + + /** + * 瀵煎叆鏂囨。杩涘彛 + * @param file + * @return + */ + boolean addDocInfo(MultipartFile file); + + /** + * 鍒犻櫎鏂囨。淇℃伅 + * @param id + * @return + */ + boolean deleteDocInfo(String id); + + /** + * 鏂囨。涓嬭浇 + * @param response + * @param id + * @return + */ + Result<?> downloadDocFile(HttpServletResponse response, String id); +} diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java new file mode 100644 index 0000000..dc85ab3 --- /dev/null +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/DocInfoServiceImpl.java @@ -0,0 +1,81 @@ +package org.jeecg.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.api.vo.FileUploadResult; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.exception.ExceptionCast; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.FileUtil; +import org.jeecg.modules.system.entity.FileDocInfo; +import org.jeecg.modules.system.mapper.DocInfoMapper; +import org.jeecg.modules.system.service.IDocInfoService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@Service +public class DocInfoServiceImpl extends ServiceImpl<DocInfoMapper, FileDocInfo> implements IDocInfoService { + + @Override + public boolean addDocInfo(MultipartFile file) { + if (file == null || file.isEmpty()) { + throw new JeecgBootException("闈炴硶鍙傛暟"); + } + FileUploadResult fileUploadResult = FileUtil.uploadFile(file); + if(fileUploadResult == null) + throw new JeecgBootException("鏂囨。瀵煎叆澶辫触"); + + String fileName = FileUtil.getFilenameNonSuffix(file.getOriginalFilename()); + List<FileDocInfo> fileDocInfoList = this.list(new LambdaQueryWrapper<FileDocInfo>().eq(FileDocInfo::getFileName, fileName)); + if (CollectionUtils.isNotEmpty(fileDocInfoList)) + throw new JeecgBootException("璇ユ枃妗e凡瀛樺湪"); + + FileDocInfo docInfo = new FileDocInfo(); + String docId = IdWorker.getIdStr(); + docInfo.setId(docId); + docInfo.setFileName(fileUploadResult.getFileName()); + docInfo.setFilePath(fileUploadResult.getFilePath()); + docInfo.setFileEncodeName(fileUploadResult.getFileEncodeName()); + docInfo.setFileSize(fileUploadResult.getFileSize()); + docInfo.setFileSuffix(fileUploadResult.getFileSuffix()); + return super.save(docInfo); + } + + @Override + public boolean deleteDocInfo(String id) { + + if(StringUtils.isBlank(id)) + throw new JeecgBootException("闈炴硶鍙傛暟"); + FileDocInfo en = super.getById(id); + if(en == null) + throw new JeecgBootException("鏈煡璇㈠埌鏂囦欢淇℃伅"); + FileUtil.deleteFile(en.getFilePath(), en.getFileName()); + return super.removeById(id); + } + + @Override + public Result<?> downloadDocFile(HttpServletResponse response, String id) { + + if(!StringUtils.isBlank(id)) + throw new JeecgBootException("闈炴硶鍙傛暟"); + FileDocInfo en = super.getById(id); + if(en == null) + throw new JeecgBootException("鏈煡璇㈠埌鏂囦欢淇℃伅"); + + String fileName; + if(StringUtils.isNotBlank(en.getFileSuffix())) { + fileName = en.getFileName() + "." + en.getFileSuffix(); + }else { + fileName = en.getFileName(); + } + FileUtil.downLoadFile(response, en.getFileEncodeName(), en.getFilePath(), fileName); + return null; + } +} -- Gitblit v1.9.3