This commit is contained in:
2026-09-24 16:25:22 +08:00
commit 7428184f01
1198 changed files with 314515 additions and 0 deletions
@@ -0,0 +1,4 @@
## 1.0.22025-07-25
* 兼容原生鸿蒙
## 1.0.12025-02-10
* 兼容所有平台
@@ -0,0 +1,83 @@
{
"id": "x-base64toarraybuff-s",
"displayName": "x-base64toarraybuff-s",
"version": "1.0.0",
"description": "x-base64toarraybuff-s",
"keywords": [
"x-base64toarraybuff-s"
],
"repository": "",
"engines": {
"HBuilderX": "^3.6.8"
},
"dcloudext": {
"type": "uts",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "",
"data": "",
"permissions": ""
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "u",
"aliyun": "u",
"alipay": "u"
},
"client": {
"Vue": {
"vue2": "u",
"vue3": "u"
},
"App": {
"app-android": "u",
"app-ios": "u",
"app-harmony": "u"
},
"H5-mobile": {
"Safari": "u",
"Android Browser": "u",
"微信浏览器(Android)": "u",
"QQ浏览器(Android)": "u"
},
"H5-pc": {
"Chrome": "u",
"IE": "u",
"Edge": "u",
"Firefox": "u",
"Safari": "u"
},
"小程序": {
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}
@@ -0,0 +1,61 @@
# x-base64toarraybuff-s
### 兼容性
| Harmony | IOS | Android | WEB | 小程序 |
| --- | --- | --- | --- | --- |
| 支持 | 支持 | 支持 | 支持 | 支持 |
### 开发文档
这是一个跨平台的base64和ArrayBuffer转换工具,提供了两个主要API:
#### base64ToArrayBuffer
将Base64字符串转换为ArrayBuffer。
**参数:**
- data: string - 需要转换的Base64字符串
**返回值:**
- ArrayBuffer - 转换后的二进制数据
**示例:**
```ts
import { base64ToArrayBuffer } from "@/uni_modules/x-base64toarraybuff-s"
const base64Str = "SGVsbG8gV29ybGQ="
const buffer = base64ToArrayBuffer(base64Str)
```
#### arrayBufferToBase64
将ArrayBuffer转换为Base64字符串。
**参数:**
- data: ArrayBuffer - 需要转换的二进制数据
**返回值:**
- string - 转换后的Base64字符串
**示例:**
```ts
import { arrayBufferToBase64 } from "@/uni_modules/x-base64toarraybuff-s"
const buffer = new ArrayBuffer(8)
const base64Str = arrayBufferToBase64(buffer)
```
### 使用说明
1. 使用前,如果是win请先在页面引用,打基座,再编译使用
2. 如果你是Mac用户不需要打基座,直接引用使用
3. 如果你是加密插件用户,不管是win,mac都要打基座。
### 注意事项
1. 该插件在所有平台(iOS、Android、Web、小程序)上均可用
2. 转换过程中会自动处理不同平台的实现差异,开发者无需关心具体实现
3. 建议在处理大量数据时进行适当的性能优化
@@ -0,0 +1,10 @@
import Base64 from "android.util.Base64"
import ByteBuffer from 'java.nio.ByteBuffer';
export const base64ToArrayBuffer = (data : string) :ArrayBuffer => {
return ArrayBuffer.fromByteBuffer(ByteBuffer.wrap(Base64.decode(data, Base64.DEFAULT)))
}
export const arrayBufferToBase64 = (data : ArrayBuffer) : string => {
return Base64.encodeToString(data.toByteBuffer().array(),Base64.DEFAULT)
}
@@ -0,0 +1,5 @@
{
"dependencies": {
"x_library_s": "./lib/x_library_s.har"
}
}
@@ -0,0 +1,42 @@
import { util } from "@kit.ArkTS";
import { BusinessError } from "@kit.BasicServicesKit";
/**
* 将base64数据转换为arraybuffer
* @param data base64数据
* @returns Promise<ArrayBuffer>
*/
function btoa_x(data: string): ArrayBuffer {
const base64 = new util.Base64Helper();
const dataSplit = data.split(",");
const uint8Array = base64.decodeSync(dataSplit.length > 1 ? data.split(",")[1] : data);
const buffer: ArrayBuffer = uint8Array.buffer.slice(0, uint8Array.byteLength);
return buffer
}
function atob_x(data:ArrayBuffer){
const base64 = new util.Base64Helper();
const unit8data = new Uint8Array(data)
return base64.encodeToStringSync(unit8data)
}
export const base64ToArrayBuffer = (data : string) :ArrayBuffer => {
try {
return btoa_x(data)
} catch (error) {
const e = error as BusinessError;
console.error("TMUI",e.message)
return new ArrayBuffer(0)
}
}
export const arrayBufferToBase64 = (data : ArrayBuffer) : string => {
try {
return atob_x(data)
} catch (error) {
const e = error as BusinessError;
console.error("TMUI",e.message)
return ''
}
}
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
</dict>
</plist>
@@ -0,0 +1,3 @@
{
"deploymentTarget": "12"
}
@@ -0,0 +1,12 @@
import { Data } from 'Foundation';
export const base64ToArrayBuffer = (data : string) : ArrayBuffer => {
let dadx = new Data(base64Encoded = data)
if(dadx == null) return new ArrayBuffer(0)
return ArrayBuffer.fromData(dadx!)
}
export const arrayBufferToBase64 = (data : ArrayBuffer) : string => {
let dadx = data.toData()
return dadx.base64EncodedString()
}
@@ -0,0 +1,43 @@
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
for (let i = 0; i < chars.length; i++) {
lookup[chars.charCodeAt(i)] = i;
}
export const encode = function (arraybuffer) {
let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';
for (i = 0; i < len; i += 3) {
base64 += chars[bytes[i] >> 2];
base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
base64 += chars[bytes[i + 2] & 63];
}
if (len % 3 === 2) {
base64 = base64.substring(0, base64.length - 1) + '=';
}
else if (len % 3 === 1) {
base64 = base64.substring(0, base64.length - 2) + '==';
}
return base64;
};
export const decode = function (base64) {
let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
if (base64[base64.length - 1] === '=') {
bufferLength--;
if (base64[base64.length - 2] === '=') {
bufferLength--;
}
}
let arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);
for (i = 0; i < len; i += 4) {
encoded1 = lookup[base64.charCodeAt(i)];
encoded2 = lookup[base64.charCodeAt(i + 1)];
encoded3 = lookup[base64.charCodeAt(i + 2)];
encoded4 = lookup[base64.charCodeAt(i + 3)];
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
}
return arraybuffer;
};
@@ -0,0 +1,9 @@
import {decode,encode} from "./base64ToArraybuffer.uts"
export const base64ToArrayBuffer = (data : string) :ArrayBuffer => {
return decode(data)
}
export const arrayBufferToBase64 = (data : ArrayBuffer) : string => {
return encode(data)
}
@@ -0,0 +1,43 @@
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
for (let i = 0; i < chars.length; i++) {
lookup[chars.charCodeAt(i)] = i;
}
export const encode = function (arraybuffer) {
let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';
for (i = 0; i < len; i += 3) {
base64 += chars[bytes[i] >> 2];
base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
base64 += chars[bytes[i + 2] & 63];
}
if (len % 3 === 2) {
base64 = base64.substring(0, base64.length - 1) + '=';
}
else if (len % 3 === 1) {
base64 = base64.substring(0, base64.length - 2) + '==';
}
return base64;
};
export const decode = function (base64) {
let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
if (base64[base64.length - 1] === '=') {
bufferLength--;
if (base64[base64.length - 2] === '=') {
bufferLength--;
}
}
let arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);
for (i = 0; i < len; i += 4) {
encoded1 = lookup[base64.charCodeAt(i)];
encoded2 = lookup[base64.charCodeAt(i + 1)];
encoded3 = lookup[base64.charCodeAt(i + 2)];
encoded4 = lookup[base64.charCodeAt(i + 3)];
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
}
return arraybuffer;
};
@@ -0,0 +1,9 @@
import {decode,encode} from "./base64ToArraybuffer.uts"
export const base64ToArrayBuffer = (data : string) :ArrayBuffer => {
return decode(data)
}
export const arrayBufferToBase64 = (data : ArrayBuffer) : string => {
return encode(data)
}