主系表 上传多组图片

@Override
public userDO deleteOneFile(String url, Long id) throws Exception {
        userDO  userDO= new userDO();
        userDO = userDOMapper.selectOneAndPictureById(id);
            List<Diagram> diagramList = new ArrayList<>();
            if (userDO.getAnnex() != null) {
                diagramList = userDO.getAnnex();
            }

            String fileName = FilenameUtils.getName(url);
            FilePageReqVO filePageReqVO = new FilePageReqVO();
            PageResult<FileDO> fileDOList = new PageResult<>();
            filePageReqVO = new FilePageReqVO();
            filePageReqVO.setPath(fileName);
            fileDOList = fileService.getFilePage(filePageReqVO);
            if (fileDOList.getList().size() > 0) {
                for (FileDO fileDOListList : fileDOList.getList()) {
                    fileService.deleteFile(fileDOListList.getId());
                }
            }
            
            List<Diagram> diagramListAll = new ArrayList<>();
            for (int i = 0; i < diagramList.size(); i++) {

                Diagram diagram = JSONObject.parseObject(JSON.toJSONString(diagramList.get(i)), Diagram.class);
                if (!fileName.equals(diagram.getName())) {
                    diagram.setName(diagram.getName());
                    diagram.setUrl(diagram.getUrl());
                    diagram.setRealName(diagram.getRealName());
                    diagramListAll.add(diagram);
                }
            }
            userDO.setAnnex(diagramListAll);
            userDOMapper.updateById(userDO);
            return userDO;
        }
    }

一个主表对应多个细表,现在要分别往细表中存储图片

前端:

// 接口
export function addDataAndPictures(data){
    return request.upload({
        url: MOCK + '' +
            '/api/add-pictures',
        data: data,
    });
}
<template>
<van-form ref="formData" 
    <van-cell-group  v-for="(item, index) in Data" :key="index" inset>
      <view class="top">
        <span>{{ "明细" + (index + 1) }}</span>
        <div>
            <div v-if="index > 0" style="color: black" @click="delFormLeave(index)">
                            <van-icon name="close"></van-icon>删除
            </div>
            <div style="color: #0189ce;margin-left: 10px" @click="addFormLeave">
                            <van-icon name="add-o"/>添加
            </div>
        </div>
      </div>
      <van-field
          name="姓名"
          label="姓名"
          input-align="right"
          placeholder="请输入"
          v-model="item.name"
      />
      <van-field label-align="top" required >
        <template #label>
          <div class="picture-label">
            <span>照片</span>
            <span>{{ item.picture.length + "/9" }}</span>
          </div>
        </template>
        <template #input>
          <van-uploader v-model="item.picture" multiple :max-count="9" 
                        @delete="handelDelete"/>
        </template>
      </van-field>
    </van-cell-group>

<van-button @click="submit"/>


</template>
<script setup lang="ts">
     const mainData = ref({
          mainId: "",
          data: [{
            id: "", // 细表id
            name: "",//名称、型号
            picture: [],//照片,
            fileList: [],
            fileName: []//明细图片名称多组
          }],
     })
     const delFormLeave = (index) => {
      data.splice(index, 1); // 根据索引移除相应的元素
     };

    const handelDelete = async (file) => { // 图片删除
          if ("file" in file) {
        // 没有上传到后端的图片 直接删
          }
    };

    const submit () =(){
        let sendData = {id: mainData.value.id};
        let formDatas = new FormData();
          sendData["list"] = mainData.value.data;
          for (let i = 0; i < mainData.value.data.length; i++) {
            let listTop = data[i];
             for (let j = 0; j < mainData.value.data[i].picture.length; j++){
              let list = mainData.value.data[i].picture[j];
              listTop.fileName = [];
          listTop.fileName.push(list.file.name);
          formDatas.append("file", list.file);
        }
      }

      formDatas.append("data", JSON.stringify(sendData));
      addDataAndPictures(formDatas).then((success) => {
        if (success.data.data) {
          // console.log("保存成功")
        }
      });

    }

</script>

 后端-mybatis:

@PostMapping("/api/add-pictures")
public CommonResult<List<DetailDO>> submit(@RequestParam(value = "file", required = false) MultipartFile[] files,@RequestParam("data") String  data) throws IOException {
        NewReqVO vo = JSONObject.parseObject(data,ReqVO.class);
        return success(service.submit(files, vo));
}
// 创建时候的类
@Data
public class CreateNewReqVO {
    @Schema(description = "主表ID")
    private Long id;

    private List<NewDetailListReqVO> list;

    @Data
    public  class NewDetailListReqVO{
        @Schema(description = "姓名")
        @NotNull(message = "姓名;唯一不能为空")
        private String itemName;
        

        @Schema(description = "上传的图片名称")
        private List<String> fileName;
        
    }
}


// 原本的DO类
@Data
public class DetailDO extends BaseDO {

    @TableId
    private Long id;

    @TableField(value = "picture", typeHandler = FastjsonTypeHandler.class)
    private List<Diagram> picture;

}

// 实现层
 List<DetailDO> submit(MultipartFile[] files, NewReqVO vo) throws IOException;

// 实现类
@Override
@Transactional(rollbackFor = Exception.class)
    public List<DetailDO> submit(MultipartFile[] files, NewReqVO vo) throws IOException {
        List<DetailDO> result = new ArrayList<>();
        DetailDO detailDO = new DetailDO();
        
        for(CreateNewReqVO.NewDetailListReqVO list : vo.getList()) {
            detailDO = new DetailDO();
            BeanUtils.copyProperties(list, detailDO);
            detailDO.setId(IdWorker.getId());
            detailDO.setHeadId(vo.getId());
            if (list.getFileName().size() > 0) {
                Diagram diagram = new Diagram();
                List<Diagram> diagramList = new ArrayList<>();
                List<MultipartFile> filesFilter = Arrays.stream(files)
                .filter(ft ->list.getFileName().contains(ft.getOriginalFilename()))
                .collect(Collectors.toList());
                for (MultipartFile fileList : filesFilter) {
                    String name = (IdWorker.getId()) +"."+     FileUtil.getSuffix(fileList.getOriginalFilename());
                    //上传图片
                    String fileUrl = fileService.createFile(fileList.getOriginalFilename(), name, IoUtil.readBytes(fileList.getInputStream()));
                    diagram = new Diagram();
                    diagram.setUrl(fileUrl);
                    diagram.setName(name);
                    diagram.setRealName(fileList.getOriginalFilename());
                    diagramList.add(diagram);
                }
                DetailDO.setPicture(diagramList);
            }
            detailDOMapper.insert(DetailDO);
            result.add(DetailDO);
        }
     
        return result;
    }
   

注:DO是List<Diagram>类型  加注解

@TableField(value = "attachment", typeHandler = FastjsonTypeHandler.class)

根据id和url删图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值