news 2026/4/16 17:51:00

uni.chooseMedia 读取base64 或 二进制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uni.chooseMedia 读取base64 或 二进制

获取path

uni.chooseMedia({ count:1, success(res){ let path = res.tempFiles[0].tempFilePath; // Android content:// 先转成本地可上传地址 if(path.startsWith('content://')){ path = plus.io.convertLocalFileSystemURL(path); } //获得path } });

获取base64

function convertLocalPathToBlob(path) { return new Promise((resolve, reject) => { uni.saveFile({ tempFilePath: path, // 临时文件路 success(res) { const savedFilePath = res.savedFilePath; // 保存后的文件路径 plus.io.resolveLocalFileSystemURL(savedFilePath, (entry) => { console.log("准备读取文件"); console.log("entry", entry); entry.file((file) => { console.log("进入entry", file); const absolutePath = entry.fullPath; const reader = new plus.io.FileReader(); reader.onloadend = (e) => { //console.log("读取文件成功", e.target.result); resolve(e.target.result); }; reader.onerror = (err) => { console.log("读取文件失败", err); reject(err); }; reader.onprogress = function(event) { console.log("读取进度:", event.loaded, event.total); }; reader.readAsDataURL(file); //只能读出来base64 // reader.readAsArrayBuffer(absolutePath); //这里二进制死活读不出来 console.log("reader", reader); console.log("进入entry结束", reader); }); }, (err) => { console.log("准备读取文件失败", err); reject(err); }); } }) }) }

base64转二进制

const arrayBuffer = uni.base64ToArrayBuffer(dataURL.split(',')[1]);

// base64转二进制 function dataURLtoArrayBuffer(dataURL) { const base64 = dataURL.split(',')[1]; const binaryString = atob(base64); const len = binaryString.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes.buffer; }

注意

const xhr = new plus.net.XMLHttpRequest(); xhr.open('PUT', resa.uploadUrl, true); xhr.mimeType = fileType || 'application/octet-stream'; xhr.responseType = 'arraybuffer'; // 监听数据接收进度 xhr.onprogress = function(event) { console.log('event',event) if (event.lengthComputable) { const percent = (event.loaded / event.total) * 100; console.log('上传进度:', percent + '%'); } }; const binaryString = arrayBufferToString(arrayBuffer); xhr.setRequestHeader('Content-Type', 'image/jpeg' ); xhr.send(binaryString);//plus.net.XMLHttpRequest 只能上传文本,不能上传二进制 这里卡了好久
function saveImage(ab, fileName) { return new Promise((resolve, reject) => { // 1. 先申请存储权限(Android 10+ 必须) plus.android.requestPermissions(['android.permission.WRITE_EXTERNAL_STORAGE'], () => { // 2. 创建写入目录 const dir = '_doc/'; // 也可换 '_downloads/' 等 plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => { fs.root.getDirectory(dir, { create: true }, dirEntry => { // 3. 创建空文件 console.log(111); dirEntry.getFile(fileName, { create: true }, fileEntry => { // 4. 写入 ArrayBuffer fileEntry.createWriter(writer => { console.log(222); writer.onwrite = () => resolve(fileEntry.fullPath); // 写盘完成 writer.onerror = e => {console.error('Writer 错误:', e);reject(e);} console.log(333); //const blob = new Blob([ab], { type: 'image/jpeg' }); writer.write(blob);//uniapp 这里保存二进制,每次保存都是文件可以创建,但是大小只有0B,查询说也是只可以保存文本,不能保存二进制 console.log(444);// 直接写 ArrayBuffer }, reject); }, reject); }, reject); }, reject); }, reject); }); }

本来想用 plus.net.XMLHttpRequest() 直接上传二进制文件,但是不能发送二进制,后来有试了renderjs 中的XMLHttpRequest ,测试可以上传,请看我其他文章

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:37:52

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

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

作者头像 李华
网站建设 2026/4/15 17:25:33

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

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

作者头像 李华
网站建设 2026/4/13 11:08:47

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

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

作者头像 李华
网站建设 2026/4/15 17:56:00

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

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

作者头像 李华
网站建设 2026/4/16 15:28:53

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

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

作者头像 李华
网站建设 2026/4/16 11:05:04

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

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

作者头像 李华