element ui Upload 文件上传成功,后端返回的二进制文件流的解析和下载

本文介绍了在使用Element UI时如何进行文件上传,并在后端返回二进制文件流后进行解析和下载。首先全局导入Element UI组件,然后在data中设置上传所需的action、headers和fileList。headers中携带token,确保上传请求的身份验证。当文件上传成功,handleAvatarSuccess方法会被调用,接收到的res是二进制文件流。通过new Blob()方法将文件流转换为可下载的Blob对象,实现文件的下载。同时,文章还提到了如何限制上传文件的大小,以防止过大文件的上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.全局导入element ui 之后,直接在页面使用


2.在data里面定义 action、headers、fileList

  • fileList置空;
  • header里携带token:token在登录成功之后,后端返回给前端的,可以存在localStorage、cookies、vuex状态管理,其中'Bearer '是后端要求加在token前面的(不要求就不加) 
  • action:上传文件的接口地址

3.上传文件成功后(handleAvatarSuccess(res,file,fileList){} :res返回的是二进制文件流)

submitUpload(){
    // upload 是在<el-upload> 标签上绑定的ref
    //submit() 方法把表单数据提交到 Web 服务器。
    this.$refs.upload.submit(); 
}

4.对二进制文件流的解析下载(用new Blob() 处理文件流)

handleAvatarSuccess(res, file, fileList) {
	if (!res) {
	    return
	}
	//Blob对象						
	console.log(new Blob([res]))
	//URL.createObjectURL用于创建 URL 的 File对象、Blob对象或 MediaSource对象。
	let url = window.URL.createObjectURL(new Blob([res]))
	let link = document.createElement('a')
	link.style.display = 'none'
	link.href = url
	link.setAttribute('download', file.name)
	document.body.appendChild(link)
	link.click()
},
  • Blob() 构造函数返回一个新的 Blob 对象。 blob的内容由参数数组中给出的值的串联组成。
  • 语法:var aBlob = new Blob( array, options );

另外:可以限制上传文件的大小

beforeupload(file) {
    // file.size 的结果是字节
	const isLtKB = file.size / 1024
	if (isLt5M < 5120) 
		console.log('上传成功,请耐心等待下载')
		return true
	} else {
		console.log('请上传小于5M的文件')
		return false
	}
},

文件返回的是字节

1M=1024kb

1kb=1024字节


 

 

### Element UI 前端上传二进制文件实现方法 #### 配置 `el-upload` 组件用于上传文件 为了使用 `el-upload` 进行文件上传,需先确保已正确配置并安装好 Element-ui 库[^1]。此组件提供了多种方式来定制化上传行为,包括但不限于自定义请求头、指定上传地址以及处理上传前后的回调函数。 对于上传二进制文件的需求而言,重点在于设置合适的参数选项: - **action**: 设置服务器接口路径。 - **headers**: 如果有认证或其他HTTP头部信息需要传递给服务端,则在此处添加。 - **onSuccess**, **onError**, 其他事件钩子: 处理不同阶段的状态变化逻辑。 - **beforeUpload**: 可以用来做额外的数据预处理工作或者验证操作。 下面是一个简单的例子展示如何通过 `el-upload` 发送图片作为二进制后端API: ```html <template> <div id="app"> <!-- el-upload 的 action 属性指向了后台接收上传文件的服务 --> <el-upload class="upload-demo" drag action="/api/upload/image" :on-success="handleSuccess" :before-upload="beforeAvatarUpload"> <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖拽至此区域或点击上传</div> </el-upload> <!-- 显示成功上传的图片 --> <img v-if="imageUrl" :src="imageUrl" style="width: 100px;height: auto;"> </div> </template> <script> export default { data() { return { imageUrl: '' }; }, methods: { handleSuccess(response, file){ this.imageUrl = URL.createObjectURL(file.raw); }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error('仅支持 JPG 格式的图片!'); } if (!isLt2M) { this.$message.error('图片大小不得超过 2MB!'); } return isJPG && isLt2M; } } } </script> ``` 上述代码片段展示了怎样利用 `el-upload` 来发送图像文件,并在前端对其进行初步筛选(如格式尺寸)。当文件被成功上传之后,会调用 `handleSuccess()` 方法更新视图中的图片链接。 另外值得注意的是,在某些情况下可能还需要考虑跨域资源共享(CORS)等问题;同时也要注意安全性性能优化方面的要求,例如限制每次允许的最大并发连接数等[^4]。 #### 将二进制转为 Base64 编码显示于页面中 如果希望直接在浏览器里查看由后端返回来的二进制数据(比如一张图片),可以通过 JavaScript 把 ArrayBuffer 转换成 Base64 字符串形式,进而赋值给 `<img>` 标签的 src 属性完成渲染过程[^3]: ```javascript // 假设 response 是来自 fetch 或 axios 请求得到的结果对象 const arrayBufferToBase64 = (buffer) => { let binary = ''; const bytes = new Uint8Array(buffer); const len = bytes.byteLength; for (let i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); // 返回 base64 string }; axios.get('/path/to/binary', { responseType: 'arraybuffer' }) .then((response) => { const base64String = arrayBufferToBase64(response.data); document.getElementById('myImage').setAttribute( 'src', `data:image/png;base64,${base64String}` ); }); ``` 这段脚本说明了获取远程资源并通过转换成适合 Web 浏览器使用的格式来进行即时呈现的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值