疯狂的狮子li
2022-05-12 af6a08398e2bc22f3c8a3a615cbd9e23190be906
update 优化 文件与图片上传组件 使用id存储回显
已修改6个文件
101 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/system/oss.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/components/FileUpload/index.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/components/ImageUpload/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -59,6 +60,19 @@
    }
    /**
     * 查询OSS对象基于id串
     */
    @ApiOperation("查询OSS对象基于ID")
    @SaCheckPermission("system:oss:list")
    @GetMapping("/listByIds/{ossIds}")
    public R<List<SysOssVo>> listByIds(@ApiParam("OSS对象ID串")
                                     @NotEmpty(message = "主键不能为空")
                                     @PathVariable Long[] ossIds) {
        List<SysOssVo> list = iSysOssService.listByIds(Arrays.asList(ossIds));
        return R.ok(list);
    }
    /**
     * 上传OSS对象存储
     */
    @ApiOperation("上传OSS对象存储")
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java
@@ -8,6 +8,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
/**
 * 文件上传 服务层
@@ -18,6 +19,8 @@
    TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
    List<SysOssVo> listByIds(Collection<Long> ossIds);
    SysOss getById(Long ossId);
    SysOss upload(MultipartFile file);
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -42,6 +42,11 @@
        return TableDataInfo.build(result);
    }
    @Override
    public List<SysOssVo> listByIds(Collection<Long> ossIds) {
        return baseMapper.selectVoById(ossIds);
    }
    private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();
ruoyi-ui/src/api/system/oss.js
@@ -9,6 +9,14 @@
  })
}
// 查询OSS对象基于id串
export function listByIds(ossId) {
  return request({
    url: '/system/oss/listByIds/' + ossId,
    method: 'get'
  })
}
// 删除OSS对象存储
export function delOss(ossId) {
  return request({
ruoyi-ui/src/components/FileUpload/index.vue
@@ -41,7 +41,7 @@
<script>
import { getToken } from "@/utils/auth";
import { delOss } from "@/api/system/oss";
import { listByIds, delOss } from "@/api/system/oss";
export default {
  name: "FileUpload",
@@ -83,19 +83,24 @@
  },
  watch: {
    value: {
      handler(val) {
      async handler(val) {
        if (val) {
          let temp = 1;
          // 首先将值转为数组
          const list = Array.isArray(val) ? val : this.value.split(',');
          let list;
          if (Array.isArray(val)) {
            list = val;
          } else {
            await listByIds(val).then(res => {
              list = res.data.map(oss => {
                oss = { name: oss.originalName, url: oss.url, ossId: oss.ossId };
                return oss;
              });
            })
          }
          // 然后将数组转为对象数组
          this.fileList = list.map(item => {
            // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
            if (typeof item === "string") {
              item = { name: item, url: item };
            } else {
              item = { name: item.name, url: item.url, ossId: item.ossId };
            }
            item = { name: item.name, url: item.url, ossId: item.ossId };
            item.uid = item.uid || new Date().getTime() + temp++;
            return item;
          });
@@ -162,7 +167,7 @@
          this.fileList = this.fileList.concat(this.uploadList);
          this.uploadList = [];
          this.number = 0;
          this.$emit("input", this.fileList);
          this.$emit("input", this.listToString(this.fileList));
          this.$modal.closeLoading();
        }
      } else {
@@ -175,7 +180,7 @@
      let ossId = this.fileList[index].ossId;
      delOss(ossId);
      this.fileList.splice(index, 1);
      this.$emit("input", this.fileList);
      this.$emit("input", this.listToString(this.fileList));
    },
    // 获取文件名称
    getFileName(name) {
@@ -186,6 +191,15 @@
        return name;
      }
    },
    // 对象转成指定字符串分隔
    listToString(list, separator) {
      let strs = "";
      separator = separator || ",";
      for (let i in list) {
        strs += list[i].ossId + separator;
      }
      return strs != "" ? strs.substr(0, strs.length - 1) : "";
    },
  },
};
</script>
ruoyi-ui/src/components/ImageUpload/index.vue
@@ -44,7 +44,7 @@
<script>
import { getToken } from "@/utils/auth";
import { delOss } from "@/api/system/oss";
import { listByIds, delOss } from "@/api/system/oss";
export default {
  props: {
@@ -87,19 +87,21 @@
  },
  watch: {
    value: {
      handler(val) {
      async handler(val) {
        if (val) {
          // 首先将值转为数组
          const list = Array.isArray(val) ? val : this.value.split(',');
          let list;
          if (Array.isArray(val)) {
            list = val;
          } else {
            await listByIds(val).then(res => {
              list = res.data;
            })
          }
          // 然后将数组转为对象数组
          this.fileList = list.map(item => {
            // 字符串回显处理 如果此处存的是url可直接回显 如果存的是id需要调用接口查出来
            if (typeof item === "string") {
              item = { name: item, url: item };
            } else {
              // 此处name使用ossId 防止删除出现重名
              item = { name: item.ossId, url: item.url, ossId: item.ossId };
            }
            // 此处name使用ossId 防止删除出现重名
            item = { name: item.ossId, url: item.url, ossId: item.ossId };
            return item;
          });
        } else {
@@ -125,7 +127,7 @@
        let ossId = this.fileList[findex].ossId;
        delOss(ossId);
        this.fileList.splice(findex, 1);
        this.$emit("input", this.fileList);
        this.$emit("input", this.listToString(this.fileList));
      }
    },
    // 上传成功回调
@@ -136,7 +138,7 @@
          this.fileList = this.fileList.concat(this.uploadList);
          this.uploadList = [];
          this.number = 0;
          this.$emit("input", this.fileList);
          this.$emit("input", this.listToString(this.fileList));
          this.$modal.closeLoading();
        }
      } else {
@@ -189,6 +191,15 @@
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    // 对象转成指定字符串分隔
    listToString(list, separator) {
      let strs = "";
      separator = separator || ",";
      for (let i in list) {
        strs += list[i].ossId + separator;
      }
      return strs != "" ? strs.substr(0, strs.length - 1) : "";
    },
  }
};
</script>