mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 优化 文件与图片上传组件 使用id存储回显
This commit is contained in:
		@@ -32,6 +32,7 @@ import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -58,6 +59,19 @@ public class SysOssController extends BaseController {
 | 
			
		||||
        return iSysOssService.queryPageList(bo, pageQuery);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询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对象存储
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ import com.ruoyi.system.domain.vo.SysOssVo;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件上传 服务层
 | 
			
		||||
@@ -18,6 +19,8 @@ public interface ISysOssService {
 | 
			
		||||
 | 
			
		||||
    TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
 | 
			
		||||
 | 
			
		||||
    List<SysOssVo> listByIds(Collection<Long> ossIds);
 | 
			
		||||
 | 
			
		||||
    SysOss getById(Long ossId);
 | 
			
		||||
 | 
			
		||||
    SysOss upload(MultipartFile file);
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,11 @@ public class SysOssServiceImpl implements ISysOssService {
 | 
			
		||||
        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();
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,14 @@ export function listOss(query) {
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 查询OSS对象基于id串
 | 
			
		||||
export function listByIds(ossId) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/system/oss/listByIds/' + ossId,
 | 
			
		||||
    method: 'get'
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 删除OSS对象存储
 | 
			
		||||
export function delOss(ossId) {
 | 
			
		||||
  return request({
 | 
			
		||||
 
 | 
			
		||||
@@ -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 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  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 @@ export default {
 | 
			
		||||
          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 @@ export default {
 | 
			
		||||
      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 @@ export default {
 | 
			
		||||
        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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  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 @@ export default {
 | 
			
		||||
        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 @@ export default {
 | 
			
		||||
          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 @@ export default {
 | 
			
		||||
      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>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user