content: package org.ruoyi.system.controller.system;
  
  
  import cn.dev33.satoken.annotation.SaCheckPermission;
  import cn.hutool.core.util.ObjectUtil;
  import jakarta.servlet.http.HttpServletResponse;
  import jakarta.validation.constraints.NotEmpty;
  import lombok.RequiredArgsConstructor;
  import org.ruoyi.common.core.domain.R;
  import org.ruoyi.common.core.validate.QueryGroup;
  import org.ruoyi.common.log.annotation.Log;
  import org.ruoyi.common.log.enums.BusinessType;
  import org.ruoyi.common.web.core.BaseController;
  import org.ruoyi.core.page.PageQuery;
  import org.ruoyi.core.page.TableDataInfo;
  import org.ruoyi.system.domain.bo.SysOssBo;
  import org.ruoyi.system.domain.vo.SysOssUploadVo;
  import org.ruoyi.system.domain.vo.SysOssVo;
  import org.ruoyi.system.service.ISysOssService;
  import org.springframework.http.MediaType;
  import org.springframework.validation.annotation.Validated;
  import org.springframework.web.bind.annotation.*;
  import org.springframework.web.multipart.MultipartFile;
  
  import java.io.IOException;
  import java.util.Arrays;
  import java.util.List;
  
  /**
   * 文件上传 控制层
   *
   * @author Lion Li
   */
  @Validated
  @RequiredArgsConstructor
  @RestController
  @RequestMapping("/resource/oss")
  public class SysOssController extends BaseController {
  
      private final ISysOssService ossService;
  
      /**
       * 查询OSS对象存储列表
       */
      @SaCheckPermission("system:oss:list")
      @GetMapping("/list")
      public TableDataInfo<SysOssVo> list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) {
          return ossService.queryPageList(bo, pageQuery);
      }
  
      /**
       * 查询OSS对象基于id串
       *
       * @param ossIds OSS对象ID串
       */
      @SaCheckPermission("system:oss:list")
      @GetMapping("/listByIds/{ossIds}")
      public R<List<SysOssVo>> listByIds(@NotEmpty(message = "主键不能为空")
                                         @PathVariable Long[] ossIds) {
          List<SysOssVo> list = ossService.listByIds(Arrays.asList(ossIds));
          return R.ok(list);
      }
  
      /**
       * 上传OSS对象存储
       *
       * @param file 文件
       */
      @SaCheckPermission("system:oss:upload")
      @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
      @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
      public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
          if (ObjectUtil.isNull(file)) {
              return R.fail("上传文件不能为空");
          }
          SysOssVo oss = ossService.upload(file);
          SysOssUploadVo uploadVo = new SysOssUploadVo();
          uploadVo.setUrl(oss.getUrl());
          uploadVo.setFileName(oss.getOriginalName());
          uploadVo.setOssId(oss.getOssId().toString());
          return R.ok(uploadVo);
      }
  
      /**
       * 下载OSS对象
       *
       * @param ossId OSS对象ID
       */
      @SaCheckPermission("system:oss:download")
      @GetMapping("/download/{ossId}")
      public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
          ossService.download(ossId, response);
      }
  
      /**
       * 删除OSS对象存储
       *
       * @param ossIds OSS对象ID串
       */
      @SaCheckPermission("system:oss:remove")
      @Log(title = "OSS对象存储", businessType = BusinessType.DELETE)
      @DeleteMapping("/{ossIds}")
      public R<Void> remove(@NotEmpty(message = "主键不能为空")
                            @PathVariable Long[] ossIds) {
          return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true));
      }
  
  }
  