news 2026/6/25 16:33:22

uniapp 使用 XMLHttpRequest发送二进制上传文件 可使用预上传接口上传到华为obs

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uniapp 使用 XMLHttpRequest发送二进制上传文件 可使用预上传接口上传到华为obs
<template> <button @click="changeMessage">选择文件</button> <view v-show="false" :path="path" :change:path="requestModule.uploadOBS"></view> </template> <script setup> import { ref } from 'vue' import { getCurrentInstance } from 'vue' const { proxy } = getCurrentInstance() // 把回调挂到实例上,renderjs 就能通过 callMethod 调到 proxy.$onRenderData = (data) => { console.error('str:', data) } const path = ref(null) const changeMessage = () => { uni.chooseImage({ count: 1, // 最多选择数量 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机 success: async (res) => { // tempFilePath 可以作为 img 标签的 src 属性显示图片 const tempFilePaths = res.tempFilePaths path.value = tempFilePaths[0]; }, fail: (err) => { console.error('选择图片失败:', err) } }) } </script> <script> // 专门给 renderjs 回调用 ownerVm.callMethod('onRenderData', "999999") 就能调到 /* export default { methods: { onRenderData(data) { console.error('str:', data) } } } */ </script> <script module="requestModule" lang="renderjs"> export default { methods: { /* 1. 逻辑层 → renderjs */ uploadOBS(newVal, oldVal, ownerVm, vm) { console.error('path:', newVal) this.getFileAsArrayBuffer2(newVal).then(res => { console.error('arrayBuffer:', res) return this.uploadArrayBuffer(res,'https://jszj-dev.obs.cn-east-3.myhuaweicloud.com/2011725287372374017/jszj_lp_merchant_apply_for_application_materials_file_id/20260116/1762482093185_1768566856106.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260116T123416Z&X-Amz-SignedHeaders=host&X-Amz-Credential=HPUAACHPJ15SJKPZGOAP%2F20260116%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=86400&X-Amz-Signature=29eb09d67a7bf73afb199e75148c57d73d13d65146fe6bd351b479cc0ebd66d1','image/jpeg'); }).then(res => { console.error('upload:', res) }).catch(err => { }) //调用vue2方法 //ownerVm.callMethod('onRenderData', "999999") //调用vue3方法 ownerVm.callMethod('$onRenderData', "999999") }, getFileAsArrayBuffer2(filePath) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest() xhr.open('GET', filePath, true) xhr.responseType = 'arraybuffer' xhr.onload = function() { if (xhr.status === 200) { resolve(xhr.response) } else { reject(new Error('Failed to load file')) } } xhr.onerror = function() { reject(new Error('Network error')) } xhr.send() }) }, uploadArrayBuffer(arrayBuffer, uploadUrl, fileType = 'application/octet-stream') { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); /* 1. 打开连接 */ xhr.open('PUT', uploadUrl, true); /* 2. 设置请求头 */ xhr.setRequestHeader('Content-Type', fileType); /* 3. 响应类型(按需要) */ xhr.responseType = 'arraybuffer'; /* 4. 上传进度 */ xhr.upload.onprogress = function(e) { if (e.lengthComputable) { const percent = (e.loaded / e.total) * 100; console.log('上传进度:', percent.toFixed(2) + '%'); } }; /* 5. 成功/失败 */ xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { resolve(xhr.response); // 服务端返回的 ArrayBuffer } else { reject(new Error(`上传失败 ${xhr.status}`)); } }; xhr.onerror = () => reject(new Error('网络错误')); /* 6. 发送二进制 */ xhr.send(arrayBuffer); }); } } } </script> <style> </style>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 21:36:50

基于 Flutter × OpenHarmony 的应用语言设置弹窗实战

基于 Flutter OpenHarmony 的应用语言设置弹窗实战 前言 在现代多语言应用开发中&#xff0c;提供灵活的语言切换能力已成为提升用户体验的重要手段。用户能够根据个人偏好选择界面语言&#xff0c;不仅增强了应用的国际化能力&#xff0c;也提升了用户粘性与满意度。本篇文章…

作者头像 李华
网站建设 2026/6/18 10:36:53

USB2.0过流保护电路实现方案手把手教学

USB2.0过流保护电路实战设计指南&#xff1a;从原理到落地&#xff0c;一文讲透 你有没有遇到过这样的场景&#xff1f;客户反馈“插了个U盘&#xff0c;主板就烧了”&#xff1b;或者测试时一短接VBUS线&#xff0c;整个系统直接宕机。问题出在哪&#xff1f;往往就是 USB电源…

作者头像 李华
网站建设 2026/6/19 5:56:01

企业文档自动化落地实践:MinerU镜像部署详细步骤分享

企业文档自动化落地实践&#xff1a;MinerU镜像部署详细步骤分享 1. 引言 在现代企业办公环境中&#xff0c;文档处理是高频且重复性极高的任务。无论是合同、报告、学术论文还是扫描件&#xff0c;传统人工提取信息的方式效率低下、成本高昂。随着AI技术的发展&#xff0c;智…

作者头像 李华
网站建设 2026/6/19 2:00:55

FunASR WebUI实战:快速部署中文语音识别系统

FunASR WebUI实战&#xff1a;快速部署中文语音识别系统 1. 引言 1.1 业务场景描述 在智能客服、会议记录、教育辅助和内容创作等实际应用中&#xff0c;语音转文字&#xff08;ASR&#xff09;技术已成为提升效率的关键工具。然而&#xff0c;许多开发者在使用开源ASR方案时…

作者头像 李华
网站建设 2026/6/21 8:33:49

高效网盘下载助手完整配置与使用教程

高效网盘下载助手完整配置与使用教程 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无需输入“暗号”即可…

作者头像 李华
网站建设 2026/6/13 9:50:12

DLSS Swapper终极指南:快速掌握游戏画质调优神器

DLSS Swapper终极指南&#xff1a;快速掌握游戏画质调优神器 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏更新后画质突然变差而困扰吗&#xff1f;当你发现最新DLSS版本反而让心爱的游戏画面失真时&#…

作者头像 李华