news 2026/6/10 7:50:00

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/5 14:49:33

基于 Flutter × OpenHarmony 构建工具统计卡片的实践解析

文章目录基于 Flutter OpenHarmony 构建工具统计卡片的实践解析前言背景Flutter OpenHarmony 跨端开发介绍开发核心代码解析1. 组件整体职责2. Card 容器设计3. 内部布局结构4. 标题区域5. Grid 统计卡片布局6. 单个统计卡片复用心得总结基于 Flutter OpenHarmony 构建工具统…

作者头像 李华
网站建设 2026/5/22 6:40:54

通义千问3-4B实战案例:法律文书长文本分析系统搭建

通义千问3-4B实战案例&#xff1a;法律文书长文本分析系统搭建 1. 引言&#xff1a;为何选择通义千问3-4B构建法律文书分析系统 1.1 法律文书处理的现实挑战 在司法、合规与企业法务场景中&#xff0c;法律文书普遍具有篇幅长、结构复杂、术语密集等特点。一份完整的合同、判…

作者头像 李华
网站建设 2026/6/5 14:55:45

YOLOv8应用实战:体育赛事分析系统搭建

YOLOv8应用实战&#xff1a;体育赛事分析系统搭建 1. 引言&#xff1a;从工业检测到体育场景的迁移价值 随着计算机视觉技术的不断演进&#xff0c;目标检测已从实验室走向实际生产环境。YOLO&#xff08;You Only Look Once&#xff09;系列作为实时目标检测领域的标杆&…

作者头像 李华
网站建设 2026/5/31 16:06:24

NewBie-image-Exp0.1教程:动漫场景光照控制的实现方法

NewBie-image-Exp0.1教程&#xff1a;动漫场景光照控制的实现方法 1. 引言 1.1 技术背景与应用需求 在当前AI生成内容&#xff08;AIGC&#xff09;快速发展的背景下&#xff0c;高质量动漫图像生成已成为数字艺术创作的重要方向。传统扩散模型虽然能够生成风格多样的图像&a…

作者头像 李华
网站建设 2026/6/6 2:56:53

NewBie-image-Exp0.1性能调优:降低显存占用的实用方法

NewBie-image-Exp0.1性能调优&#xff1a;降低显存占用的实用方法 1. 背景与挑战 NewBie-image-Exp0.1 是一个基于 Next-DiT 架构的 3.5B 参数量级动漫图像生成模型&#xff0c;具备高质量画质输出和结构化控制能力。该镜像预配置了完整的运行环境、修复后的源码以及必要的依…

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

DLSS Swapper终极指南:游戏性能优化完整教程

DLSS Swapper终极指南&#xff1a;游戏性能优化完整教程 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 问题根源&#xff1a;为什么你需要DLSS版本管理&#xff1f; 当你在《赛博朋克2077》中遭遇画面卡顿&#xff0…

作者头像 李华