el-upload上传文件功能,传多个参数问题

本文介绍两种文件上传的方法,一种使用axios,另一种使用fetch。基于axios的方法通过data定义额外参数,并设置文件流名称。基于fetch的方法则利用FormData对象进行构建。

前几天有一个文件上传功能,用的是post请求,需要传file文件流以及其他的参数,总结了两种方法。

需求:传name和文件流。

在这里插入图片描述

第一种方法(基于axios):

data定义额外参数,name定义文件流名称。
参数赋值:
paramsData = { name: ‘admin’}
name = “file”
在这里插入图片描述
完整代码:

<el-upload
	  class="upload-demo"
	  action="https://jsonplaceholder.typicode.com/posts/"
	  :on-preview="handlePreview"
	  :on-remove="handleRemove"
	  :before-remove="beforeRemove"
	  :headers="authToken"
	  multiple
	  :limit="3"
	  :on-exceed="handleExceed"
	  :file-list="fileList"
	  name="file"
	  :data="paramsData">
		  <el-button size="small" type="primary">点击上传</el-button>
		  <div slot="tip" class="el-upload__tip">
		  只能上传jpg/png文件,且不超过500kb
		  </div>
</el-upload>

注意:设置token的值
authToken: {
  token: 'abcjdjeidei',
},

第二种方法(基于fetch):

条件: (1)用fetch请求
(2)获取到文件内容,此处保存的是el-upload组件上传文件参数file文件,名称叫currentFile
(3)接口名字:/detail/info
(4)token值:‘abcjdjeidei’

代码如下:

const formData = new FormData();
formData.append('file',this.currentFile.raw);
formData.append('name', 'admin');
fetch(process.env.API_ROOT + '/detail/info', {
	method: 'post',
	body: formData,
	headers: {
	  'token': 'abcjdjeidei'
	}
}).then(response=>
	response.json())
.then(res=>{
	if (res.code === 0) {
	  this.$message.success(res.msg);
	} else {
	  this.$message.error(res.msg);
	}
})
.catch(error=>{
	// console.log(error)
})
.finally(response=>{
	// console.log(response)
})

注意: response.json()是转换后端返回的数据,这样才能在then回调里获取code状态码和msg描述。

### 使用 `el-upload` 组件实现多文件上传 #### 配置说明 为了使用 Element UI 的 `el-upload` 组件实现多文件上传功能,可以按照以下方式进行配置: 1. **属性设置** - 设置 `multiple=true` 属性允许用户选择多个文件[^2]。 - 使用 `action` 定义文件上传的目标 URL[^1]。 - 如果需要自定义上传逻辑,可以通过 `http-request` 方法替代默认的上传行为[^3]。 2. **数据绑定** -Vue 数据对象中创建一个数组变量(如 `fileList`),用于存储已选中的文件列表。 - 可以通过监听事件 `on-change` 动态更新该数组的内容。 3. **表单提交** -文件附加到 FormData 对象中,并通过 AJAX 请求发送至服务器。 - 调用 `this.$refs.upload.submit()` 手动触发上传过程。 --- #### 示例代码 以下是基于上述配置的一个完整示例: ```vue <template> <div> <!-- 文件上传组件 --> <el-upload ref="upload" :action="uploadUrl" multiple :auto-upload="false" :file-list="fileList"> <el-button slot="trigger" type="primary">选取文件</el-button> <el-button @click="submitUpload">上传文件</el-button> </el-upload> </div> </template> <script> export default { data() { return { uploadUrl: 'https://example.com/upload', // 替换为目标URL fileList: [] // 存储文件列表 }; }, methods: { submitUpload() { this.$refs.upload.submit(); } } }; </script> ``` --- #### 自定义上传逻辑 如果需要更复杂的控制,比如分批次上传或处理特定字段,则可通过 `http-request` 来定制化上传流程。下面是一个结合 WebSocket 和手动构建 FormData 的例子: ```javascript methods: { customUpload(file) { const formData = new FormData(); formData.append('files', file.file); // 添加文件到FormData // 假设我们还需要额外的数据字段 formData.append('userId', this.userId); // 发起WebSocket连接并输二进制流 (仅作示意) const ws = new WebSocket('wss://your-websocket-server'); ws.onopen = () => { ws.send(formData.get('files')); // 发送文件内容 }; ws.onerror = (error) => { console.error('WebSocket error:', error); }; ws.onclose = () => { console.log('File uploaded via WebSocket.'); }; } } ``` 在此基础上,记得将模板部分的 `http-request` 属性指向此方法名即可完成集成。 --- ### 注意事项 - 当前版本可能因框架升级而有所变化,请查阅官方文档确认最新参数支持情况。 - 若涉及大文件或者网络不稳定环境下的断点续功能需求时,推荐引入第三方库辅助开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值