Vue3使用ElementPlus中的el-upload手动上传并调用上传接口

前端代码

html 复制代码
	   <div class="upload-div">
          <el-upload
            v-model:file-list="form.fileImageList"
            ref="uploadRef"
            capture="false"
            action="#"
            accept="image/*"
            list-type="picture-card"
            :on-change="handleChange"
            :auto-upload="false"
            :on-preview="handlePictureCardPreview"
            :on-remove="handleRemove"
            :multiple="true"
          >
            <el-icon>
              <Plus/>
            </el-icon>
          </el-upload>

          <el-dialog v-model="dialogVisible" class="image-dialog">
            <img style="width: 100%;height: 100%" w-full :src="dialogImageUrl" alt="Preview Image"/>
          </el-dialog>
        </div>
typescript 复制代码
const fileBinaryList = ref([]);
const dialogImageUrl = ref('');
const dialogVisible = ref(false);
const buttonLoading = ref(false);

const handleChange = (file, files) => {
  // file是当前上传的文件,files是当前所有的文件,
  fileBinaryList.value = files;
};

const handlePictureCardPreview = (file) => {
  dialogImageUrl.value = file.url;
  dialogVisible.value = true
}

const handleRemove = (file) => {
  delImageByName(file.name).then(response => {
    proxy.$modal.msgSuccess("删除成功");
  }).finally(() => {
  });
}

function submitForm() {
 		let formData = new FormData();  //FormData中的参数
        formData.append('id', form.value.id);
        fileBinaryList.value.forEach((item) => {
          formData.append('files', item.raw);
        });
        uploadBinaryImage(formData);
        proxy.$modal.msgSuccess("修改成功");
}

前端定义接口

typescript 复制代码
export function uploadBinaryImage(data) {
  return request({
    url: '/update/update/uploadBinaryImage',
    method: 'post',
    data: data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

后端代码

实体类

java 复制代码
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author: rattcs
 * @date: 2023/1/13
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UploadDto {

    private String id;

}

定义接口

java 复制代码
	/**
     * 上传二进制文件图片集合
     */
    @SaCheckPermission("update:update:uploadBinaryImage")
    @Log(title = "上传二进制文件图片", businessType = BusinessType.INSERT)
    @PostMapping("/uploadBinaryImage")
    public void uploadBinaryImage(@RequestBody @RequestParam("files") MultipartFile[] files, UploadDto bo) {
        iInvestigationRiverLakeDischargeOutletsService.uploadBinaryImage(files,bo);
    }

上传文件并插入数据库数据

java 复制代码
	@Value("${upload.dir}")
    private String UPLOAD_DIR;

	@Override
    public void uploadBinaryImage(MultipartFile[] files,UploadDto uploadDto) {
        String id = uploadDto.getId();
        for (MultipartFile file : files) {
            try {
                // 检查上传目录是否存在,不存在则创建
                File uploadDir = new File(UPLOAD_DIR);
                if (!uploadDir.exists()) {
                    uploadDir.mkdirs();
                }

                // 获取文件名
                String fileName = file.getOriginalFilename();
                String suffix = file.getOriginalFilename().split("\\.")[1];

                // 设置上传文件的保存路径
                String fileUploadName = java.util.UUID.randomUUID() + "." + suffix;
                Path filePath = uploadDir.toPath().resolve(fileUploadName);

                // 将文件复制到指定路径
                Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING);
                investigationImageMapper
                    .insert(new InvestigationImage() {{
                        setInvestigationId(Long.valueOf(id));
                        setImageUrl(fileUploadName);
                        setImageName(fileUploadName);
                        setCreateTime(new Date());
                    }});
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
相关推荐
华玥作者6 小时前
uniapp 万条数据不卡顿:我写了个虚拟列表组件 hy-list,原生支持瀑布流
数据结构·uni-app·list·vue3
sugar__salt1 天前
Vue3 基础知识点整理 —— 从入门到响应式核心完全指南
vue.js·笔记·vue·vue3
万亿少女的梦1682 天前
基于微信小程序、Spring Boot与Vue3的智慧养老管理系统设计与实现
spring boot·redis·微信小程序·mybatis·vue3
gis开发之家3 天前
《Vue3 从入门到大神33篇》Vue3 源码详解(三):响应式核心思想——从 Object.defineProperty 到 Proxy
前端·javascript·vue.js·vue3·vue3源码
gis开发之家4 天前
《Vue3 从入门到大神32篇》Vue3 源码详解(二):从 GitHub Clone 到断点调试,手把手搭建源码阅读环境
vue.js·前端框架·github·vue3·vue3源码
gis开发之家5 天前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
gis开发之家7 天前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
雨季mo浅忆7 天前
上传文件夹
前端·vue3
蜡台10 天前
uniapp vue2 转 vue3
前端·javascript·uni-app·vue3·vue2
随风一样自由11 天前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery