| | |
| | | */ |
| | | package org.springblade.modules.resource.endpoint; |
| | | |
| | | import io.minio.*; |
| | | import io.swagger.annotations.Api; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.SneakyThrows; |
| | | import org.springblade.common.config.FileConfig; |
| | | import org.springblade.common.utils.FileUtils; |
| | | import org.springblade.core.launch.constant.AppConstant; |
| | | import org.springblade.core.oss.model.BladeFile; |
| | | import org.springblade.core.oss.model.OssFile; |
| | |
| | | import org.springblade.core.tool.constant.RoleConstant; |
| | | import org.springblade.core.tool.utils.FileUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.modules.FTP.FtpUtil; |
| | | import org.springblade.modules.apply.entity.Apply; |
| | | import org.springblade.modules.apply.entity.ExamPayment; |
| | | import org.springblade.modules.apply.service.ExamPaymentService; |
| | | import org.springblade.modules.exam.service.ExamPaperService; |
| | | import org.springblade.modules.resource.builder.oss.OssBuilder; |
| | | import org.springblade.modules.resource.entity.Attach; |
| | | import org.springblade.modules.resource.service.IAttachService; |
| | | import org.springblade.modules.system.entity.User; |
| | | import org.springblade.modules.system.service.IUserService; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.File; |
| | | import java.io.InputStream; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.regex.Pattern; |
| | | |
| | | import static org.springblade.common.constant.FtpConstant.*; |
| | | import static org.springblade.common.constant.FtpConstant.ftpPath; |
| | | |
| | | /** |
| | | * 对象存储端点 |
| | |
| | | * 附件表服务 |
| | | */ |
| | | private final IAttachService attachService; |
| | | |
| | | private final IUserService userService; |
| | | |
| | | |
| | | private final ExamPaperService examPaperService; |
| | | |
| | | private final ExamPaymentService examPaymentService; |
| | | |
| | | /** |
| | | * 创建存储桶 |
| | |
| | | */ |
| | | @SneakyThrows |
| | | @PostMapping("/put-file-attach") |
| | | public R<BladeFile> putFileAttach(@RequestParam MultipartFile file,String deptid,String type) { |
| | | public R<BladeFile> putFileAttach(@RequestParam MultipartFile file,String deptid,String type,Long noticeId) { |
| | | String fileName = file.getOriginalFilename(); |
| | | BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream()); |
| | | Long attachId = buildAttach(fileName, file.getSize(), bladeFile,deptid,type); |
| | | Long attachId = buildAttach(fileName, file.getSize(), bladeFile,deptid,type,noticeId); |
| | | bladeFile.setAttachId(attachId); |
| | | return R.data(bladeFile); |
| | | } |
| | |
| | | */ |
| | | @SneakyThrows |
| | | @PostMapping("/put-file-attach-by-name") |
| | | public R<BladeFile> putFileAttach(@RequestParam String fileName, @RequestParam MultipartFile file,String deptid,String type) { |
| | | public R<BladeFile> putFileAttach(@RequestParam String fileName, @RequestParam MultipartFile file,String deptid,String type,Long noticeId) { |
| | | BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream()); |
| | | Long attachId = buildAttach(fileName, file.getSize(), bladeFile,deptid,type); |
| | | Long attachId = buildAttach(fileName, file.getSize(), bladeFile,deptid,type,noticeId); |
| | | bladeFile.setAttachId(attachId); |
| | | return R.data(bladeFile); |
| | | } |
| | |
| | | * @param bladeFile 对象存储文件 |
| | | * @return attachId |
| | | */ |
| | | private Long buildAttach(String fileName, Long fileSize, BladeFile bladeFile,String deptid,String type) { |
| | | private Long buildAttach(String fileName, Long fileSize, BladeFile bladeFile,String deptid,String type,Long noticeId) { |
| | | String fileExtension = FileUtil.getFileExtension(fileName); |
| | | Attach attach = new Attach(); |
| | | attach.setDomain(bladeFile.getDomain()); |
| | |
| | | attach.setExtension(fileExtension); |
| | | attach.setDeptid(deptid); |
| | | attach.setType(type); |
| | | if (null!=noticeId){ |
| | | attach.setNoticeId(noticeId); |
| | | } |
| | | attachService.save(attach); |
| | | return attach.getId(); |
| | | } |
| | |
| | | return R.success("操作成功"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 文件上传,zip , 缴费凭证 |
| | | * |
| | | * @param file 图片对象 |
| | | */ |
| | | @PostMapping("put-file-exam-payment-zip") |
| | | public R putFileExamPaymentZip(@RequestParam MultipartFile file) throws Exception { |
| | | Map<String, Object> map = new HashMap<>(1); |
| | | //填写你文件上传的地址以及相应信息 |
| | | String url = "http://223.82.109.183:2081"; |
| | | String access = "zhbaadmin"; |
| | | String secret = "zhbapassword"; |
| | | String bucket = "zhba"; |
| | | MinioClient minioClient = |
| | | MinioClient.builder() |
| | | .endpoint(url) |
| | | .credentials(access, secret) |
| | | .build(); |
| | | // 检查存储桶是否已经存在 |
| | | boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build()); |
| | | if (!isExist) { |
| | | // 创建一个名为zip的存储桶,用于zip文件。 |
| | | minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); |
| | | minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).build()); |
| | | } |
| | | String fileName = file.getOriginalFilename(); |
| | | String namePath = fileName.substring(0,fileName.lastIndexOf(".")); |
| | | String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(Locale.US); |
| | | //判断文件是不是zip类型 |
| | | if(!fileType.equals("zip")){ |
| | | map.put("data","上传文件类型不符!"); |
| | | return R.data(map); |
| | | } |
| | | //FileConfig.localtion是配置文件和config类生产的,测试demo可以直接把FileConfig.localtion替换成D:/test |
| | | String uuid = UUID.randomUUID().toString(); |
| | | String desPath = FileConfig.localtion + File.separator + uuid.replaceAll("-", ""); |
| | | //遗漏了这个代码,在本地测试环境不会出问题,在服务器上一定会报没有找到文件的错误 |
| | | String savePath = FileConfig.localtion + File.separator; |
| | | FileUtils fileUtil = new FileUtils(); |
| | | //解压zip文件 |
| | | FileUtils.unZip(file, desPath,savePath); |
| | | |
| | | List<MultipartFile> fileList = new ArrayList<>(); |
| | | //获取图片文件 |
| | | fileList = fileUtil.getSubFiles(desPath,fileList); |
| | | for (MultipartFile multipartFile : fileList){ |
| | | if(multipartFile.getName().toLowerCase().endsWith(".png") || multipartFile.getName().toLowerCase().endsWith(".jpg")) { |
| | | String newName = "upload/picture/" + UUID.randomUUID().toString().replaceAll("-", "") + multipartFile.getName().substring(multipartFile.getName().lastIndexOf(".")); |
| | | InputStream in = multipartFile.getInputStream(); |
| | | String[] split = newName.split("/"); |
| | | //创建头部信息 |
| | | Map<String, String> headers = new HashMap<>(1 << 2); |
| | | //添加自定义内容类型 |
| | | headers.put("Content-Type", "application/octet-stream"); |
| | | //上传 |
| | | minioClient.putObject( |
| | | PutObjectArgs.builder().bucket(bucket).object(newName).stream( |
| | | in, in.available(), -1) |
| | | .headers(headers) |
| | | .build()); |
| | | |
| | | String urls = "http://223.82.109.183:2081/zhba/" + newName; |
| | | |
| | | //取出身份证号,查询用户信息,更新用户信息 |
| | | String pictrueName = multipartFile.getName().substring(0, multipartFile.getName().lastIndexOf(".")); |
| | | // String regex ="([1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx])|([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3})"; |
| | | String regex ="[\u4e00-\u9fa5]"; |
| | | Pattern compile = Pattern.compile(regex); |
| | | String idCardNo = compile.matcher(pictrueName).replaceAll(""); |
| | | User user = userService.getUserInfoByIdCardNo(idCardNo); |
| | | //设置用户头像url |
| | | if (null!=user){ |
| | | ExamPayment examPayment = new ExamPayment(); |
| | | examPayment.setWorkerId(user.getId().toString()); |
| | | examPayment.setCertificateUrl(urls); |
| | | examPayment.setType(1L); |
| | | examPayment.setPaymentStatus(1); |
| | | examPayment.setPaymentTime(new Date()); |
| | | //查询当前人员的报名信息 |
| | | List<Apply> applyList = examPaperService.getApplyDetail(user.getId().toString()); |
| | | //有且只有一条信息 |
| | | if (applyList.size()==1){ |
| | | examPayment.setApplyCode(applyList.get(0).getId().toString()); |
| | | } |
| | | //新增 |
| | | examPaymentService.save(examPayment); |
| | | } |
| | | } |
| | | } |
| | | //最后要删除文件 |
| | | FileUtils.clearFiles(FileConfig.localtion + File.separator + file.getOriginalFilename()); |
| | | FileUtils.clearFiles(desPath); |
| | | //数据封装 |
| | | map.put("data", "上传成功!"); |
| | | //返回 |
| | | return R.data(map); |
| | | } |
| | | |
| | | } |