From 54ac5f42b94ef8a6720060d6e9de3b8eed7aa2e7 Mon Sep 17 00:00:00 2001 From: "97694732@qq.com" Date: Fri, 5 Jun 2026 11:32:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:plus.io=E8=AE=BE=E4=B8=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E9=A6=96=E9=80=89,getFileSystemManager?= =?UTF-8?q?=E9=99=8D=E4=B8=BA=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/minio.js | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/utils/minio.js b/utils/minio.js index 117028a..2371e9d 100644 --- a/utils/minio.js +++ b/utils/minio.js @@ -82,19 +82,44 @@ function buildAuthHeader(objectKey, date, contentType, contentSha256) { function readFileAsBase64(filePath) { return new Promise(function (resolve, reject) { - try { - var fs = uni.getFileSystemManager() - if (fs && fs.readFile) { - fs.readFile({ filePath: filePath, encoding: 'base64', success: function (res) { resolve(res.data) }, fail: function () { reject(new Error('readFile失败')) } }) - } else { - reject(new Error('不支持文件读取')) - } - } catch (e) { - reject(new Error('读取文件异常: ' + e.message)) + // 方式1: plus.io FileReader(HBuilder App 环境,最可靠) + if (typeof plus !== 'undefined' && plus.io && plus.io.FileReader) { + plus.io.resolveLocalFileSystemURL(filePath, function (entry) { + entry.file(function (file) { + var reader = new plus.io.FileReader() + reader.onloadend = function (e) { + var data = e.target.result + if (data.indexOf(',') > -1) data = data.split(',')[1] + resolve(data) + } + reader.onerror = function () { reject(new Error('FileReader失败')) } + reader.readAsDataURL(file) + }, function () { reject(new Error('获取文件对象失败')) }) + }, function (err) { + console.warn('resolveLocalFileSystemURL失败:', JSON.stringify(err)) + // 回退到 getFileSystemManager + tryFSManager(filePath, resolve, reject) + }) + return } + // 方式2: uni.getFileSystemManager(H5/小程序) + tryFSManager(filePath, resolve, reject) }) } +function tryFSManager(filePath, resolve, reject) { + try { + var fs = uni.getFileSystemManager() + if (fs && fs.readFile) { + fs.readFile({ filePath: filePath, encoding: 'base64', success: function (res) { resolve(res.data) }, fail: function (e) { reject(new Error('readFile失败: ' + JSON.stringify(e))) } }) + } else { + reject(new Error('不支持文件读取')) + } + } catch (e) { + reject(new Error('不支持文件读取: ' + e.message)) + } +} + function base64ToBytes(base64) { var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' base64 = base64.replace(/=+$/, '')