ElementPlus手动上传文件和JSON对象,前后端代码

问题描述

使用elementplus + axios + vue + springboot 上传视频时,因为还要附带Json信息一起发送给后端,前后端代码。


前端代码:

<template>
  <el-upload
    ref="photoRef"
    :auto-upload="false"
    :http-request="upload"
  >
    <template #trigger>
      <el-button type="primary">选择文件</el-button>
    </template>

    <el-button class="ml-3" type="success" @click="submitUpload">
      上传文件
    </el-button>
  </el-upload>
</template>

<script setup>
import { ref } from 'vue'
import server from '../request/index.js'

let photoRef = ref()

function upload(params) {
  let formData = new FormData()
  formData.append('photoRef', params.file)
  formData.append('str', '测试字符')
  server({
    url: '/user/uploadTest',
    method: 'post',
    data: formData,
  }).then((resp) => {
    console.log('success')
  })
}
function submitUpload() {
  photoRef.value.submit()
}

</script>

 :auto-upload="false"  表示选择完文件后不自动上传,后续需要点击按钮手动上传

  ref="photoRef"  当调用submit()方法,会自动调用上传方法

 :http-request="upload"  定义上传方法

#流程:点击上传按钮触发submitUpload()调用 photoRef.value.submit()会自动调用上传方法(自定义:http-request)绑定的方法upload(params),接收参数为封装文件对象 file属性可与取得文件对象

Axios配置

axios 默认content-type为Json格式,无法上传文件,需要修改请求头content-type为multipart/form-data,

简单办法:构造一个   let formData = new FormData() 对象,append()添加属性, axios的data传入formData  axios会默认修改请求头为multipart/form-data

后端接收

@PostMapping("/user/uploadTest")
    public String uploadTest(
            @RequestParam("photoRef")  MultipartFile photoRef,
            @RequestPart("str") String str
    ){
        System.out.println("文件大小="+photoRef.getSize());
        System.out.println("str = " + str);
        return "上传成功";
    }

使用 @RequestParam("photoRef")接收,值要和formData中对应

补充:当FormData 传入json字符串时

后端接收到的字符串要先还原成被html转义的特殊字符

下面代码是使用hutool工具包

        String unescape = HtmlUtil.unescape(string);//还原成json字符串
        User = JSONUtil.toBean(unescape, User.class);//Json转对象

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基本的上传PDF文件的前后端代码示例: 前端代码: ```html <!DOCTYPE html> <html> <head> <title>上传PDF文件</title> </head> <body> <h1>上传PDF文件</h1> <form id="uploadForm" enctype="multipart/form-data"> <input type="file" name="pdfFile" id="pdfFile"> <button type="submit">上传</button> </form> <script> const form = document.getElementById('uploadForm'); form.addEventListener('submit', (e) => { e.preventDefault(); const fileInput = document.getElementById('pdfFile'); const file = fileInput.files[0]; const formData = new FormData(); formData.append('pdfFile', file); fetch('/upload', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { console.log('文件上传成功:', data); }) .catch(error => { console.error('文件上传失败:', error); }); }); </script> </body> </html> ``` 后端代码(使用Node.js和Express框架): ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('pdfFile'), (req, res) => { if (!req.file) { res.status(400).json({ error: '未选择文件' }); } else { // 在这里可以对上传的文件进行处理 res.json({ message: '文件上传成功' }); } }); app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); }); ``` 请注意,以上代码只是一个基本示例,实际情况中你可能需要进行更多的验证和处理。前端代码使用了HTML和JavaScript来创建一个简单的上传表单,并通过Fetch API将文件发送到后端。后端代码使用了Node.js和Express框架来接收文件并进行处理。在实际应用中,你可能需要根据你的需求进行适当的修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值