| | |
| | | import cn.dev33.satoken.annotation.SaIgnore; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONArray; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.SerializationFeature; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.dromara.common.core.constant.CacheNames; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.core.utils.file.FileUtils; |
| | | import org.dromara.common.core.validate.QueryGroup; |
| | | import org.dromara.common.oss.entity.SynchronousRequest; |
| | | import org.dromara.common.oss.entity.VideoRequest; |
| | | import org.dromara.common.redis.utils.CacheUtils; |
| | | import org.dromara.common.redis.utils.QueueUtils; |
| | | import org.dromara.common.web.core.BaseController; |
| | | import org.dromara.common.log.annotation.Log; |
| | | import org.dromara.common.log.enums.BusinessType; |
| | |
| | | import org.dromara.system.domain.SysOss; |
| | | import org.dromara.system.domain.bo.SysOssBo; |
| | | import org.dromara.system.domain.properties.Boundary; |
| | | import org.dromara.system.domain.properties.FtpConfig; |
| | | import org.dromara.system.domain.vo.SysOssUploadVo; |
| | | import org.dromara.system.domain.vo.SysOssVo; |
| | | import org.dromara.system.mapper.SysOssMapper; |
| | |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.dromara.system.uitil.FTPUtil; |
| | | import org.dromara.system.uitil.FtpApche; |
| | | import org.dromara.system.uitil.HttpUtils; |
| | | import org.dromara.system.uitil.PasswordUtil; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | @RequestMapping("/resource/oss") |
| | | public class SysOssController extends BaseController { |
| | | |
| | | private final FtpConfig ftpConfig; |
| | | private final Boundary boundary; |
| | | private final ISysOssService ossService; |
| | | private final SysOssMapper ossMapper; |
| | | |
| | | /** |
| | | * 查询OSS对象存储列表 |
| | | */ |
| | |
| | | @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) |
| | | @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
| | | public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException { |
| | | |
| | | if (ObjectUtil.isNull(file)) { |
| | | return R.fail("上传文件不能为空"); |
| | | } |
| | | SysOssVo oss = ossService.upload(file); |
| | | SynchronousRequest request = new SynchronousRequest(); |
| | | request.setFile(file); |
| | | |
| | | |
| | | |
| | | //添加队列数据 |
| | | QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); |
| | | log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); |
| | | SysOssUploadVo uploadVo = new SysOssUploadVo(); |
| | | uploadVo.setUrl(oss.getUrl()); |
| | | uploadVo.setFileName(oss.getOriginalName()); |
| | | uploadVo.setOssId(oss.getOssId().toString()); |
| | | uploadVo.setPassword(oss.getPassword()); |
| | | |
| | | return R.ok(uploadVo); |
| | | } |
| | | |
| | |
| | | // @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) |
| | | // @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
| | | // public R<String> upload(@RequestPart("file") MultipartFile file) throws IOException { |
| | | // if (ObjectUtil.isNull(file)) { |
| | | // return R.fail("上传文件不能为空"); |
| | | // } |
| | | // VideoRequest request = new VideoRequest(); |
| | | // request.setFile(file); |
| | | // request.setFileName(file.getOriginalFilename()); |
| | | // String post = post(request); |
| | | // String password = post.substring(post.indexOf("password\":\"") + 9, post.indexOf("\"}")); |
| | | // String originalfileName = file.getOriginalFilename(); |
| | | // long l = System.currentTimeMillis(); |
| | | // String password = PasswordUtil.randomPassword(6); |
| | | // String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); |
| | | // FtpApche.uploadFile(ftpConfig, file, password + String.valueOf(l) + suffix); |
| | | // return R.ok(password); |
| | | // } |
| | | |
| | | private String post(VideoRequest request) throws IOException { |
| | | HashMap<String, String> headers = new HashMap<>(3); |
| | | String requestUrl = boundary.getChief() + "/resource/synchronization/uploadTwo"; |
| | | String requestUrl = boundary.getChief() + "/resource/synchronization/uploadTwo"; |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); |
| | | headers.put("content-type", "application/json"); |
| | |
| | | @SaCheckPermission("system:oss:download") |
| | | @GetMapping("/download/{ossId}/{password}") |
| | | public R<String> download(@PathVariable Long ossId, @PathVariable String password, HttpServletResponse response) throws IOException { |
| | | SysOss oss = ossMapper.selectById(ossId); |
| | | if(!oss.getPassword().equals(password)){ |
| | | return R.fail("提取码错误!"); |
| | | if (String.valueOf(ossId).equals("12345678")) { |
| | | SysOssVo sysOssVo = ossMapper.selectVoOne(new LambdaQueryWrapper<SysOss>() |
| | | .eq(SysOss::getPassword, password)); |
| | | if (sysOssVo == null) { |
| | | return R.fail("提取码错误!"); |
| | | } |
| | | ossService.download(sysOssVo.getOssId(), response); |
| | | } else { |
| | | SysOss oss = ossMapper.selectById(ossId); |
| | | |
| | | if (!oss.getPassword().equals(password)) { |
| | | return R.fail("提取码错误!"); |
| | | } |
| | | ossService.download(ossId, response); |
| | | } |
| | | ossService.download(ossId, response); |
| | | |
| | | |
| | | return R.ok(); |
| | | } |
| | | |
| | |
| | | public R<Void> remove(@NotEmpty(message = "主键不能为空") |
| | | @PathVariable Long[] ossIds, |
| | | @PathVariable String password) throws Exception { |
| | | return ossService.deleteWithValidByIds(List.of(ossIds), true,password) ? R.ok() : R.fail("提取码错误!"); |
| | | return ossService.deleteWithValidByIds(List.of(ossIds), true, password) ? R.ok() : R.fail("提取码错误!"); |
| | | } |
| | | |
| | | /** |
| | |
| | | return ossService.viewPasswordById(ossId); |
| | | } |
| | | |
| | | /** |
| | | * 订阅队列(监听) |
| | | * |
| | | * @param queueName 队列名 |
| | | */ |
| | | @GetMapping("/subscribe") |
| | | public R<Void> subscribe(String queueName) { |
| | | log.info("通道: {} 监听中......", queueName); |
| | | // 项目初始化设置一次即可 |
| | | QueueUtils.subscribeBlockingQueue(queueName, (String ossId) -> { |
| | | // 观察接收时间 |
| | | log.info("通道: {}, 收到数据: {}", queueName, ossId); |
| | | // ossMapper.deleteById(Long.valueOf(ossId)); |
| | | }); |
| | | return R.ok("操作成功"); |
| | | } |
| | | // /** |
| | | // * 订阅队列(监听) |
| | | // * |
| | | // * @param queueName 队列名 |
| | | // */ |
| | | // @GetMapping("/subscribe") |
| | | // public R<Void> subscribe(String queueName) { |
| | | // log.info("通道: {} 监听中......", queueName); |
| | | // // 项目初始化设置一次即可 |
| | | // QueueUtils.subscribeBlockingQueue(queueName, (String ossId) -> { |
| | | // // 观察接收时间 |
| | | // log.info("通道: {}, 收到数据: {}", queueName, ossId); |
| | | //// ossMapper.deleteById(Long.valueOf(ossId)); |
| | | // }); |
| | | // return R.ok("操作成功"); |
| | | // } |
| | | |
| | | |
| | | } |