更新记录
1.3.1(2026-09-06)
- 修复 uni-app x Android 示例的选择文件回调与可空参数类型导致的 UTS 编译错误。
1.3.0(2026-08-24)
- 修复 HarmonyOS 队列鉴权状态码转换、嵌套响应读取和网络状态监听器的 ArkTS 严格类型编译错误。
- 新增无需改造普通
multipart/form-data服务端的可靠上传队列:文件入队、任务持久化、暂停、继续、取消、失败项重试、完成任务清理和队列快照监听。 - 新增断网等待与当前会话联网恢复、
wifiOnly、全局并发、任务有效期、完成任务保留期和持久化容量上限策略。 - Android、iOS、Harmony 会先把待上传文件复制到插件专属持久目录;重启恢复后跳过已成功文件,未完成的当前文件从头重传。
- Web 恢复任务元数据但普通文件引用在页面重载后会明确标记
file-missing;微信、支付宝小程序按平台持久文件配额尽力恢复,不伪造成功。 - 上传地址、请求头和表单参数改由
resolveRequest在每次真正上传前动态提供;队列元数据与公开快照不保存凭据、签名 URL、响应头或插件私有绝对路径。 <lizhao-choose-file />新增显式mode="queue",uni-app 与 uni-app x 示例补齐入队、恢复、暂停、继续和失败重试入口;既有 1.2.x 选择与普通上传 API 保持原行为。
1.2.12(2026-06-24)
- 对齐 uni-app x 示例页与 uni-app 示例页的
lizhao-choose-file业务封装测试界面,补齐上传配置、业务 API、组件式业务卡片、图片选择入口、文件选择结果和测试日志等演示能力。 - 修复 uni-app x 示例页“业务资料上传”区域只显示说明占位、业务卡片未展示的问题,补齐“组件:选择文档并上传”、文件数量、状态、进度、空态、文件列表和删除入口。
- 对齐内置业务组件的状态显示规则:未选择文件时仅展示空态提示,不提前显示上传进度和文件列表图标;选择文件并进入上传/完成状态后再展示整体进度、百分比、文件图标和文件信息。
- 本版本只调整示例页 UI、状态联动和发布日志,不修改插件公共 API、UTS 原生实现或 uni-app 已验证示例。
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
lizhao-choose-file
lizhao-choose-file 是面向 uni-app / uni-app x 的文件选择与上传插件,适合在表单附件、头像上传、资料提交、合同上传、批量导入等场景中快速接入“选择文件 + 上传 + 进度展示”的完整流程。
它还提供无需改造现有上传服务端的跨端可靠上传队列:断网时等待、联网后按策略恢复,应用重启后可找回任务,并跳过已经成功的文件。中断中的单个文件会从头重传,因此这里的“续传”是批次级任务恢复,不是依赖服务端分片协议的字节级断点续传。
你可以只调用 API 获取文件,也可以使用内置 <lizhao-choose-file /> 业务组件,直接获得上传按钮、文件列表、文件数量、进度条、图片缩略图、删除文件、取消上传和状态回调能力。
联系方式:信-微:l-z-1-8-7-1512-5421(-去掉,不这样写会被和谐)
功能特色
| 能力 | 作用 | 使用方式 |
|---|---|---|
| 多端文件选择 | 统一封装 Android、iOS、Harmony、Web、微信小程序、支付宝小程序文件选择能力 | pickFile(options) / pickFiles(options) |
| 通用 HTTP 上传 | 选择后可手动上传,也可选择完成后立即上传 | uploadFile(options) / pickAndUploadFiles(options) |
| 业务场景预设 | 内置头像、图片、文档、Office、媒体、压缩包等常见 accept 配置 | scene: 'document' 等 |
| 上传进度与取消 | 返回上传任务,支持进度回调、整体进度、取消上传 | 保存返回的 task 后调用 task.abort() |
| 批量结果统计 | 多文件上传可返回成功数量、失败数量、失败明细和每个文件结果 | 查看 UploadFilesResult |
| 响应 JSON 解析 | 服务端返回 JSON 字符串时,可同时保留原文和结构化数据 | 上传配置传 parseJson: true |
| 成功状态码配置 | 后端使用 201 / 204 或业务自定义成功码时,可按项目规则判断上传成功 |
上传配置传 successStatusCodes |
| 失败重试与并发限制 | 弱网或大批量上传时,可配置失败自动重试和最大并发数 | 上传配置传 retryCount / retryDelay / concurrency |
| 内置业务 UI | 不想手写附件列表时,可直接使用组件完成选择、上传、预览、删除和进度展示 | <lizhao-choose-file /> |
| 可靠上传队列 | 批量任务可暂停、继续、断网等待、重启恢复和仅重试失败文件 | configureUploadQueue + enqueueUploadFiles |
适合哪些场景
- 表单附件、合同、发票、资质材料、作业文档等单文件或多文件提交。
- 头像、图片、媒体、Office、压缩包等需要按文件类型限制选择范围的业务。
- 页面已有自定义 UI,但希望复用跨端文件选择、上传、进度聚合和取消能力。
- 希望快速落地完整上传区域,减少文件列表、状态展示和删除交互开发成本。
- 需要对接业务上传接口,并读取服务端 JSON、HTTP 状态码或部分失败明细的场景。
接入方式怎么选
| 业务需求 | 推荐方式 | 适合场景 |
|---|---|---|
| 只选择一个文件 | pickFile(options) |
表单附件、合同、单个凭证 |
| 选择多个文件 | pickFiles(options) |
多附件、批量导入、资料包 |
| 选择后立即上传 | pickAndUploadFile(options) / pickAndUploadFiles(options) |
页面只关心上传结果 |
| 按业务类型上传 | pickBusinessFiles(options) / pickAndUploadBusinessFiles(options) |
头像、图片、文档、Office、压缩包等常见场景 |
| 想直接使用内置 UI | <lizhao-choose-file ui-mode="business" /> |
希望少写页面代码,内置展示进度、数量和文件列表 |
| 页面已有自定义 UI | <lizhao-choose-file ui-mode="headless" /> 或纯 API |
只复用选择、上传、进度聚合和取消能力 |
| 弱网、离线或跨重启上传 | 可靠上传队列 API 或 <lizhao-choose-file mode="queue" /> |
无需改造普通 multipart 上传接口;中断文件从头重传 |
从简单到复杂接入
1. 引入插件
API 调用统一从插件根目录引入:
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
组件通过 easycom 使用:
<template>
<lizhao-choose-file />
</template>
2. 选择单个文件
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// 最小接入:只选择一个文件,不上传。
LizhaoChooseFile.pickFile({
accept: '*/*',
success(file) {
console.log('选择成功', file)
},
fail(err) {
console.log('选择失败', err)
}
})
3. 选择多个文件
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// 多选适合附件、资料包等场景;maxCount 控制最多选择数量。
LizhaoChooseFile.pickFiles({
accept: '.pdf,.doc,.docx,.xls,.xlsx,image/*',
multiple: true,
maxCount: 5,
success(files) {
console.log('已选择文件', files)
}
})
4. 选择后自动上传
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// 公开测试接口只适合联调,正式业务请替换为自己的上传地址。
const task = LizhaoChooseFile.pickAndUploadFiles({
accept: '.pdf,.doc,.docx,image/*',
multiple: true,
maxCount: 3,
upload: {
url: 'https://unidemo.dcloud.net.cn/upload',
name: 'file',
formData: {
scene: 'demo'
},
progress(progress) {
console.log('上传进度', progress.index + 1, progress.total, progress.progress)
},
success(res) {
console.log('上传成功', res)
},
fail(err) {
console.log('上传失败', err)
}
}
})
// 如需取消上传,保存 task 后调用 abort。
// task?.abort()
5. 使用业务场景预设
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// document 场景会自动带上文档类 accept、默认多选和流程状态聚合。
LizhaoChooseFile.pickAndUploadBusinessFiles({
scene: 'document',
maxCount: 3,
upload: {
url: 'https://unidemo.dcloud.net.cn/upload',
name: 'file',
progress(progress) {
console.log('业务上传进度', progress.overallProgress)
}
},
stateChange(state) {
console.log('业务流程状态', state.status, state.selectedCount, state.uploadTotal)
}
})
6. 使用可靠上传队列
队列必须先配置运行期请求解析器,再恢复旧任务或加入新文件。上传地址、请求头和签名不会持久化;建议在 resolveRequest 中读取当前登录态并生成本次请求。
import {
configureUploadQueue,
enqueueUploadFiles,
restoreUploadQueue,
onUploadQueueChange
} from '@/uni_modules/lizhao-choose-file'
configureUploadQueue({
concurrency: 2,
retryCount: 2,
retryDelay: 1500,
resumeOnNetworkRestored: true,
autoResumeOnLaunch: false,
wifiOnly: false,
resolveRequest(task, success, fail) {
const url = getCurrentUploadUrl()
if (!url) {
fail({ errSubject: 'lizhao-choose-file', errCode: 9011017, errMsg: 'queue request unavailable' })
return
}
// 每次实际上传前动态读取最新登录态,不把鉴权信息写入队列文件。
success({ url, name: 'file', header: getCurrentUploadHeader() })
}
})
onUploadQueueChange((snapshot) => {
console.log('队列状态', snapshot)
})
// 应用启动时默认只恢复任务,避免未取得新凭据前自动上传。
restoreUploadQueue({ autoResume: false })
// files 来自 pickFile / pickFiles 成功回调。
enqueueUploadFiles({
files,
businessKey: 'order-10001',
autoStart: true
})
已有任务可用 pauseUploadQueueTask(taskId)、resumeUploadQueueTask(taskId)、retryUploadQueueTask(taskId) 和 cancelUploadQueueTask(taskId) 控制。retryUploadQueueTask 会跳过成功文件;源文件副本丢失时状态为 file-missing,需要重新选择文件。
7. 使用内置业务 UI
<template>
<lizhao-choose-file
scene="document"
mode="upload"
ui-mode="business"
:upload-url="uploadUrl"
upload-name="file"
title="业务资料上传"
description="支持 PDF、Word、Excel、图片和压缩包"
:show-progress="true"
:show-file-count="true"
:show-remove="true"
@success="onUploadSuccess"
@fail="onUploadFail"
@state-change="onUploadState"
/>
</template>
<script>
export default {
data() {
return {
// Web / H5 调试公开上传接口时,默认不要传自定义 header,避免 CORS 预检失败。
uploadUrl: 'https://unidemo.dcloud.net.cn/upload'
}
},
methods: {
onUploadSuccess(res) {
console.log('上传成功', res)
},
onUploadFail(err) {
console.log('上传失败', err)
},
onUploadState(state) {
console.log('上传状态', state)
}
}
}
</script>
7. 完全自定义 UI
<template>
<view>
<button @click="chooseContract">选择合同并上传</button>
<lizhao-choose-file
ref="contractUploader"
scene="document"
mode="upload"
ui-mode="headless"
:upload-url="uploadUrl"
upload-name="file"
@state-change="onUploadState"
/>
</view>
</template>
<script>
export default {
data() {
return {
uploadUrl: 'https://unidemo.dcloud.net.cn/upload'
}
},
methods: {
chooseContract() {
// headless 模式不渲染内置 UI,业务按钮通过组件方法触发流程。
this.$refs.contractUploader.choose()
},
onUploadState(state) {
console.log('自定义 UI 状态', state)
}
}
}
</script>
完整示例源码
完整页面源码已放在插件目录中,建议直接查看或复制:
E:\test\lizhao-plugin\uni_modules\lizhao-choose-file\example\uniapp\chooseFile.vue
该示例页覆盖 DCloud / httpbin 测试接口切换、基础 API、业务封装 API、business / simple / headless 三种组件模式、上传进度、文件数量、删除文件、图片缩略图、点击预览和取消上传。图片文件会显示缩略图,点击后通过 uni.previewImage 浏览同批图片。
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| uni-app | 是 | Vue2/Vue3 可用 |
| uni-app x | 是 | 多端可用 |
| Android | 是 | 普通上传使用系统文件选择器;队列模式复制到插件私有持久目录,可恢复源文件 |
| iOS | 是 | 普通上传归一化 file:// 路径;队列模式复制到插件私有 Documents 目录 |
| Harmony | 是 | 使用系统文件选择器,picker URI 通过句柄读取;队列模式复制到插件私有用户文件目录 |
| Web | 是 | 当前会话可继续;页面重载后普通 File 引用失效会标记 file-missing,需要重新选择 |
| 微信小程序 | 是 | 通过平台持久文件能力尽力恢复,受单文件、总配额和平台清理策略限制 |
| 支付宝小程序 | 是 | 通过平台持久文件能力尽力恢复,受文件系统配额和平台生命周期限制 |
说明:所有 API 平台范围为 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序。Harmony 端通过系统文件选择器返回 URI。file://media/Photo/...、file://docs... 等系统选择器 URI 会先通过 fs.openSync 打开授权文件,再复制到应用临时目录后上传;若 Harmony picker URI 无法复制到缓存/临时目录,会返回 9011011 明确错误,不会伪造成功。
API 总览
| 复杂度 | 能力 | API / 组件 |
|---|---|---|
| 1 | 单文件选择 | pickFile(options) |
| 2 | 多文件选择 | pickFiles(options) |
| 3 | 手动上传已选文件 | uploadFile(options) / uploadFiles(options) |
| 4 | 选择并自动上传 | pickAndUploadFile(options) / pickAndUploadFiles(options) |
| 5 | 业务场景选择 | pickBusinessFiles(options) |
| 6 | 业务场景选择并上传 | pickAndUploadBusinessFiles(options) |
| 7 | 内置业务 UI / headless 流程组件 | <lizhao-choose-file /> |
| 8 | 调试轨迹 | getDebugTrace() / clearDebugTrace() |
| 9 | 可靠上传队列 | configureUploadQueue / enqueueUploadFiles / restoreUploadQueue 与任务控制 API |
可靠上传队列 API
configureUploadQueue(options)
配置全局并发、重试、联网恢复和运行期请求解析器。应在恢复或入队前调用,resolveRequest 每次真正上传一个文件前触发。
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | ConfigureUploadQueueOptions | 是 | 队列配置 | 无 | concurrency / retryCount / retryDelay / resumeOnNetworkRestored / autoResumeOnLaunch / wifiOnly / maxPersistedBytes / completedRetention / taskTtl / resolveRequest |
| options.concurrency | number | 否 | 全局最大并发文件数 | 2 |
大于等于 1 |
| options.retryCount | number | 否 | 普通上传失败自动重试次数 | 2 |
大于等于 0 |
| options.retryDelay | number | 否 | 重试间隔,单位毫秒 | 1500 |
大于等于 0 |
| options.resumeOnNetworkRestored | boolean | 否 | 当前会话网络恢复后是否继续 | true |
true / false |
| options.autoResumeOnLaunch | boolean | 否 | 恢复持久任务后是否自动继续 | false |
true / false |
| options.wifiOnly | boolean | 否 | 是否只允许 Wi-Fi 上传 | false |
true / false |
| options.maxPersistedBytes | number | 否 | 插件持久副本容量上限 | 536870912 |
大于 0 |
| options.completedRetention | number | 否 | 完成任务保留时间,单位毫秒 | 86400000 |
大于等于 0 |
| options.taskTtl | number | 否 | 未完成任务有效期,单位毫秒 | 604800000 |
大于 0 |
| options.resolveRequest | UploadQueueResolveRequest | 是 | 动态返回当前上传请求,失败时任务进入 waiting-config |
无 | 无 |
enqueueUploadFiles(options) / restoreUploadQueue(options)
enqueueUploadFiles 会先保存源文件,再确认任务入队;restoreUploadQueue 会恢复元数据并检查文件副本。应用启动建议先配置队列,再以 autoResume: false 恢复,由用户确认后继续。
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options.files | Array<PickedFile> | 入队时是 | 待保存并上传的文件 | 无 | 无 |
| options.businessKey | string | 否 | 非敏感业务标识 | 空字符串 | 无 |
| options.businessData | UTSJSONObject | 否 | 非敏感业务扩展字段 | 无 | 无 |
| options.autoStart | boolean | 否 | 保存成功后是否开始调度 | true |
true / false |
| options.autoResume | boolean | 恢复时否 | 恢复后是否立即继续 | false |
true / false |
| options.success | function | 否 | 入队返回任务,恢复返回队列快照 | 无 | 无 |
| options.fail | function | 否 | 持久化、文件缺失或配置失败回调 | 无 | 无 |
| options.complete | function | 否 | 成功或失败后触发 | 无 | 无 |
其他控制 API:getUploadQueueSnapshot()、pauseUploadQueueTask(taskId)、resumeUploadQueueTask(taskId)、retryUploadQueueTask(taskId)、cancelUploadQueueTask(taskId)、removeUploadQueueTask(taskId)、pauseAllUploadQueueTasks()、resumeAllUploadQueueTasks()、clearCompletedUploadQueueTasks()、onUploadQueueChange(callback)、offUploadQueueChange(callback)。
安全说明:队列只持久化任务状态、非敏感业务字段、文件显示信息和插件内部文件键;不持久化上传 URL、Authorization、Cookie、Token、签名、完整请求头、响应正文、响应头或 App 私有绝对路径。业务侧也不要把账号、密钥或生产配置放进 businessData。
业务场景预设
业务封装 API 用于减少常见页面重复写 accept / maxCount / progress / count 状态管理。底层仍复用标准选择与上传 API,不改变平台实现。
| 场景 | 默认 accept | 默认多选 | 默认数量 | 说明 |
|---|---|---|---|---|
attachment |
*/* |
是 | 9 | 通用附件 |
avatar |
image/* |
否 | 1 | 头像或单图上传 |
image |
image/* |
是 | 9 | 图片选择或图片上传 |
document |
.pdf,.txt,.ofd |
是 | 9 | PDF、文本、OFD 文档 |
office |
.doc,.docx,.xls,.xlsx,.ppt,.pptx |
是 | 9 | Office 文件 |
media |
image/*,video/*,audio/* |
是 | 9 | 图片、视频、音频 |
archive |
.zip,.rar,.ofd,application/zip,application/vnd.rar,application/ofd |
是 | 9 | 压缩包与 OFD |
custom |
*/* |
是 | 9 | 优先使用业务传入的 accept |
pickBusinessFiles(options)
说明
按业务场景选择文件,并通过 stateChange 返回统一流程状态。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | BusinessPickFilesOptions | 是 | 业务选择参数对象 | 无 | scene / accept / multiple / maxCount / maxSize / filename / stateChange / success / fail / complete |
| options.scene | ChooseFileBusinessScene | 否 | 业务场景 | attachment |
attachment / avatar / image / document / office / media / archive / custom |
| options.accept | string | 否 | 自定义文件类型过滤规则,custom 场景优先使用 |
按场景预设 | 无 |
| options.multiple | boolean | 否 | 是否允许多选 | 按场景预设 | true / false |
| options.maxCount | number | 否 | 最大可选数量 | 按场景预设 | 无 |
| options.maxSize | number | 否 | 单文件最大体积,单位字节,0 表示不限制 | 0 |
无 |
| options.filename | string | 否 | 返回结果重命名模板 | 按场景预设 | 无 |
| options.stateChange | function | 否 | 流程状态变化回调 | 无 | 无 |
| options.success | function | 否 | 选择成功回调 | 无 | 无 |
| options.fail | function | 否 | 选择失败回调 | 无 | 无 |
| options.complete | function | 否 | 选择完成回调 | 无 | 无 |
pickAndUploadBusinessFiles(options)
说明
按业务场景选择文件并自动上传,stateChange 会聚合已选数量、当前上传序号、单文件进度、整体进度、成功数量和失败数量。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | BusinessPickAndUploadFilesOptions | 是 | 业务选择并上传参数对象 | 无 | scene / accept / multiple / maxCount / maxSize / filename / upload / stateChange / success / fail / complete |
| options.scene | ChooseFileBusinessScene | 否 | 业务场景 | attachment |
attachment / avatar / image / document / office / media / archive / custom |
| options.upload | UploadConfig | 是 | 上传配置 | 无 | url / name / header / formData / timeout / parseJson / successStatusCodes / sequential / stopOnFail / progress / success / fail / complete |
| options.stateChange | function | 否 | 流程状态变化回调 | 无 | 无 |
状态字段
| 字段 | 类型 | 说明 |
|---|---|---|
| status | ChooseFileFlowStatus | idle / picking / selected / uploading / success / fail / cancelled |
| selectedCount | number | 已选择文件数量 |
| uploadIndex | number | 当前上传序号,从 1 开始 |
| uploadTotal | number | 本轮上传文件总数 |
| currentProgress | number | 当前文件上传进度 |
| overallProgress | number | 整体上传进度 |
| successCount | number | 上传成功数量 |
| failCount | number | 上传失败数量 |
<lizhao-choose-file />
说明
可选业务组件,适合快速放到页面中触发选择或选择并上传。核心文件能力仍由 UTS API 提供,组件按 ui-mode 提供三种接入方式:business 使用内置业务上传 UI,simple 使用轻量按钮列表 UI,headless 不渲染内置 UI,仅通过组件方法和事件交给业务页面自定义。
属性
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| scene | string | 否 | 业务场景 | attachment |
attachment / avatar / image / document / office / media / archive / custom |
| file-type | string | 否 | 组件文件类型别名,合法值会优先覆盖 scene |
无 | attachment / avatar / image / document / office / media / archive / custom |
| mode | string | 否 | 工作模式 | pick |
pick / upload |
| ui-mode | string | 否 | 内置 UI 模式,business 为业务上传面板,simple 为轻量按钮列表,headless 不渲染内置 UI |
business |
business / simple / headless |
| accept | string | 否 | 自定义文件类型过滤,优先级最高 | 无 | 无 |
| extensions | array/string | 否 | 常用扩展名过滤,可传数组或逗号字符串 | [] |
例如 .pdf,.docx,.xlsx |
| mime-types | array/string | 否 | MIME 类型过滤,可传数组或逗号字符串 | [] |
例如 image/*,application/pdf |
| multiple | boolean | 否 | 是否允许多选 | true |
true / false |
| max-count | number | 否 | 最大选择数量 | 9 |
无 |
| max-size | number | 否 | 单文件最大体积,单位字节 | 0 |
无 |
| filename | string | 否 | 返回文件名模板,多选时底层会按现有规则追加序号 | 按场景预设 | 无 |
| upload-url | string | 否 | 上传服务器地址,mode=upload 时必填 |
无 | 无 |
| upload-name | string | 否 | multipart 文件字段名 | file |
无 |
| header | object | 否 | 上传请求头 | 无 | 无 |
| form-data | object | 否 | 上传表单字段 | 无 | 无 |
| timeout | number | 否 | 上传超时时间,单位毫秒 | 0 |
无 |
| parse-json | boolean | 否 | 是否把服务器响应字符串尝试解析到 parsedData |
false |
true / false |
| success-status-codes | array/string | 否 | 自定义成功 HTTP 状态码;为空时 200-299 均视为成功 | [] |
例如 200,201,204 |
| stop-on-fail | boolean | 否 | 多文件失败后是否停止 | true |
true / false |
| sequential | boolean | 否 | 多文件是否按顺序上传 | true |
true / false |
| show-progress | boolean | 否 | 是否显示上传进度条 | true |
true / false |
| show-file-count | boolean | 否 | 是否显示文件数量 | true |
true / false |
| show-selected-list | boolean | 否 | 是否显示已选文件列表 | true |
true / false |
| show-cancel | boolean | 否 | 是否显示取消上传按钮 | true |
true / false |
| show-remove | boolean | 否 | 是否显示文件删除入口,上传中不显示删除入口,避免 UI 列表和底层上传队列不一致 | true |
true / false |
| show-image-preview | boolean | 否 | 图片文件是否显示图片缩略图;非图片仍显示文件类型图标 | true |
true / false |
| preview-on-click | boolean | 否 | 点击图片缩略图时是否调用 uni.previewImage 预览同批图片 |
true |
true / false |
| button-text | string | 否 | 自定义按钮文案 | 按模式生成 | 无 |
| title | string | 否 | 自定义内置业务 UI 标题 | 按场景预设 | 无 |
| description | string | 否 | 自定义内置业务 UI 描述 | 按场景预设 | 无 |
| empty-text | string | 否 | 自定义空态标题 | 尚未选择文件 |
无 |
| empty-hint | string | 否 | 自定义空态说明 | 按标题描述生成 | 无 |
| remove-text | string | 否 | 删除文件按钮文案 | 删除 |
无 |
| confirm-remove | boolean | 否 | 删除前是否弹出确认框 | false |
true / false |
| confirm-remove-title | string | 否 | 删除确认框标题 | 删除文件 |
无 |
| confirm-remove-content | string | 否 | 删除确认框内容 | 确定删除该文件吗? |
无 |
| disabled | boolean | 否 | 是否禁用 | false |
true / false |
| busy-cooldown | number | 否 | 系统选择器忙碌时的点击保护时长,单位毫秒 | 1800 |
无 |
文件类型优先级:accept 明确传入时直接使用;否则组件会把 extensions 与 mime-types 合并为过滤条件;仍未配置时再使用 file-type 或 scene 对应的业务预设。
UI 模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
business |
渲染内置业务上传面板,包含场景图标、文件图标、文件名、文件大小、整体进度、当前文件进度、文件数量和取消按钮 | 想快速获得完整上传体验,不希望页面重复写业务 UI |
simple |
渲染轻量按钮、数量、进度条和简洁文件列表 | 只需要基础交互,页面已有自己的卡片或表单布局 |
headless |
不渲染内置 UI,组件只保留选择、上传、进度聚合、取消和事件能力 | 页面需要完全自定义视觉,但希望复用组件封装的流程状态 |
事件
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| @select | function | 否 | 文件选择成功时触发 |
| @progress | function | 否 | 上传进度变化时触发 |
| @success | function | 否 | 上传成功时触发 |
| @fail | function | 否 | 选择或上传失败时触发 |
| @complete | function | 否 | 选择或上传完成时触发 |
| @cancel | function | 否 | 用户取消选择或取消上传时触发 |
| @remove | function | 否 | 用户删除文件时触发,返回 { file, index, files, state },业务侧可在这里同步删除服务端临时文件 |
| @state-change | function | 否 | 统一流程状态变化时触发 |
方法
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| choose | function | 否 | 通过组件实例主动触发选择或选择并上传流程,适合 headless 模式自定义按钮调用 |
| open | function | 否 | choose 的语义化别名,便于兼容常见上传组件调用习惯 |
| abort | function | 否 | 取消当前上传任务,取消上传错误码为 9011010 |
| remove | function | 否 | 通过组件实例删除指定索引文件,等价于调用内置删除入口 |
| reset | function | 否 | 清空组件展示状态并触发一次 state-change |
pickFiles(options)
说明
选择多个文件。未配置 upload 时只返回文件选择结果;配置 upload 时选择成功后自动逐个上传。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | PickFilesOptions | 是 | 多文件选择参数对象 | 无 | accept / multiple / maxCount / maxSize / filename / upload / success / fail / complete |
| options.accept | string | 否 | 文件类型过滤规则,支持扩展名、MIME、image/*、*/* |
*/* |
无 |
| options.multiple | boolean | 否 | 是否允许多选 | false |
true / false |
| options.maxCount | number | 否 | 最大可选数量,单选固定按 1 处理 | 多选默认 9,单选默认 1 | 无 |
| options.maxSize | number | 否 | 单文件最大体积,单位字节,0 表示不限制 | 0 |
无 |
| options.filename | string | 否 | 返回结果重命名模板,多选时自动追加序号 | 无 | 无 |
| options.upload | UploadConfig | 否 | 选择成功后自动上传配置 | 无 | url / name / header / formData / timeout / parseJson / successStatusCodes / sequential / stopOnFail / progress / success / fail / complete |
| options.success | function | 否 | 选择成功回调,返回文件数组 | 无 | 无 |
| options.fail | function | 否 | 失败回调,返回统一错误对象 | 无 | 无 |
| options.complete | function | 否 | 完成回调,成功返回文件数组,失败返回错误对象 | 无 | 无 |
pickFile(options)
说明
选择单个文件。未配置 upload 时只返回文件选择结果;配置 upload 时选择成功后自动上传。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | PickFileOptions | 是 | 单文件选择参数对象 | 无 | accept / maxSize / filename / upload / success / fail / complete |
| options.accept | string | 否 | 文件类型过滤规则 | */* |
无 |
| options.maxSize | number | 否 | 单文件最大体积,单位字节,0 表示不限制 | 0 |
无 |
| options.filename | string | 否 | 返回结果重命名模板 | 无 | 无 |
| options.upload | UploadConfig | 否 | 选择成功后自动上传配置 | 无 | url / name / header / formData / timeout / parseJson / successStatusCodes / progress / success / fail / complete |
| options.success | function | 否 | 选择成功回调,返回单个文件对象 | 无 | 无 |
| options.fail | function | 否 | 失败回调,返回统一错误对象 | 无 | 无 |
| options.complete | function | 否 | 完成回调,成功返回文件对象,失败返回错误对象 | 无 | 无 |
uploadFile(options)
说明
手动上传单个已选择文件。上传方式为通用 HTTP multipart/form-data,服务器响应默认原样放入 data 字段;传 parseJson: true 时会额外尝试写入 parsedData。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | UploadFileOptions | 是 | 单文件上传参数对象 | 无 | file / url / name / header / formData / timeout / parseJson / successStatusCodes / retryCount / retryDelay / success / fail / complete / progress |
| options.file | PickedFile | 是 | pickFile 或 pickFiles 返回的文件对象 |
无 | 无 |
| options.url | string | 是 | 上传服务器地址 | 无 | 无 |
| options.name | string | 否 | multipart 文件字段名 | file |
无 |
| options.header | UTSJSONObject | 否 | 请求头配置 | 无 | 无 |
| options.formData | UTSJSONObject | 否 | 表单附加字段 | 无 | 无 |
| options.timeout | number | 否 | 上传超时时间,单位毫秒,0 表示平台默认值 | 0 |
无 |
| options.parseJson | boolean | 否 | 是否把服务器响应字符串尝试解析到 parsedData;解析失败不影响 data 原文 |
false |
true / false |
| options.successStatusCodes | Array |
否 | 自定义成功 HTTP 状态码;为空时 200-299 均视为成功 | [] |
例如 [200, 201, 204] |
| options.retryCount | number | 否 | 上传失败后自动重试次数,用户取消不会重试 | 0 |
无 |
| options.retryDelay | number | 否 | 每次重试前等待时间,单位毫秒 | 0 |
无 |
| options.success | function | 否 | 上传成功回调,返回 UploadSuccessItem |
无 | 无 |
| options.fail | function | 否 | 上传失败回调 | 无 | 无 |
| options.complete | function | 否 | 上传完成回调 | 无 | 无 |
| options.progress | function | 否 | 上传进度回调 | 无 | 无 |
uploadFiles(options)
说明
手动上传多个已选择文件。默认按顺序上传,失败后停止;传 sequential: false 时会并发上传,传 concurrency 可限制最大并发数量;传 stopOnFail: false 时会在成功结果中额外返回 failResults 便于定位部分失败文件。
支持平台 Android / iOS / Harmony / Web / 微信小程序 / 支付宝小程序
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | UploadFilesOptions | 是 | 多文件上传参数对象 | 无 | files / url / name / header / formData / timeout / parseJson / successStatusCodes / retryCount / retryDelay / concurrency / sequential / stopOnFail / success / fail / complete / progress |
| options.files | Array |
是 | pickFiles 返回的文件数组 |
无 | 无 |
| options.url | string | 是 | 上传服务器地址 | 无 | 无 |
| options.name | string | 否 | multipart 文件字段名 | file |
无 |
| options.header | UTSJSONObject | 否 | 请求头配置 | 无 | 无 |
| options.formData | UTSJSONObject | 否 | 表单附加字段 | 无 | 无 |
| options.timeout | number | 否 | 上传超时时间,单位毫秒 | 0 |
无 |
| options.parseJson | boolean | 否 | 是否把服务器响应字符串尝试解析到 parsedData;解析失败不影响 data 原文 |
false |
true / false |
| options.successStatusCodes | Array |
否 | 自定义成功 HTTP 状态码;为空时 200-299 均视为成功 | [] |
例如 [200, 201, 204] |
| options.retryCount | number | 否 | 单个文件上传失败后自动重试次数,用户取消不会重试 | 0 |
无 |
| options.retryDelay | number | 否 | 每次重试前等待时间,单位毫秒 | 0 |
无 |
| options.concurrency | number | 否 | 并发上传数量限制,仅在 sequential: false 时生效;0 表示不限制 |
0 |
无 |
| options.sequential | boolean | 否 | 是否逐个上传;传 false 会并发上传多个文件 |
true |
true / false |
| options.stopOnFail | boolean | 否 | 某个文件失败后是否停止后续上传 | true |
true / false |
| options.success | function | 否 | 全部上传成功回调,返回 UploadFilesResult |
无 | 无 |
| options.fail | function | 否 | 上传失败回调 | 无 | 无 |
| options.complete | function | 否 | 上传完成回调 | 无 | 无 |
| options.progress | function | 否 | 上传进度回调 | 无 | 无 |
pickAndUploadFile(options) / pickAndUploadFiles(options)
说明
先选择文件,再根据 options.upload 自动上传。选择成功回调仍返回原始文件对象或文件数组,上传成功回调通过 upload.success 返回。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options.upload.url | string | 是 | 上传服务器地址 | 无 | 无 |
| options.upload.name | string | 否 | multipart 文件字段名 | file |
无 |
| options.upload.header | UTSJSONObject | 否 | 请求头配置 | 无 | 无 |
| options.upload.formData | UTSJSONObject | 否 | 表单附加字段 | 无 | 无 |
| options.upload.timeout | number | 否 | 上传超时时间,单位毫秒 | 0 |
无 |
| options.upload.parseJson | boolean | 否 | 是否把服务器响应字符串尝试解析到 parsedData |
false |
true / false |
| options.upload.successStatusCodes | Array |
否 | 自定义成功 HTTP 状态码;为空时 200-299 均视为成功 | [] |
例如 [200, 201, 204] |
| options.upload.retryCount | number | 否 | 上传失败后自动重试次数,用户取消不会重试 | 0 |
无 |
| options.upload.retryDelay | number | 否 | 每次重试前等待时间,单位毫秒 | 0 |
无 |
| options.upload.concurrency | number | 否 | 多文件并发上传数量限制,仅在 sequential: false 时生效 |
0 |
无 |
| options.upload.progress | function | 否 | 上传进度回调 | 无 | 无 |
| options.upload.success | function | 否 | 上传成功回调 | 无 | 无 |
| options.upload.fail | function | 否 | 上传失败回调 | 无 | 无 |
| options.upload.complete | function | 否 | 上传完成回调 | 无 | 无 |
返回值说明
PickedFile
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 文件名 |
| size | number | 文件大小,单位字节 |
| type | string | MIME 类型 |
| path | string | 可用于上传的文件路径或临时路径 |
| url | string | 与 path 保持一致的兼容字段 |
| lastModified | number | 最后修改时间,平台不支持时为 0 |
| source | string | 文件来源平台标识 |
| ext | string | 文件扩展名 |
UploadSuccessItem
| 字段 | 类型 | 说明 |
|---|---|---|
| file | PickedFile | 本次上传的文件对象 |
| index | number | 文件在本批次中的下标,单文件固定为 0 |
| statusCode | number | HTTP 状态码 |
| data | string | 服务器原始响应字符串 |
| parsedData | any/null | 开启 parseJson 且解析成功时返回 JSON 对象或数组,否则为 null |
| header | any | 响应头信息,平台不返回时为 null |
UploadFilesResult
| 字段 | 类型 | 说明 |
|---|---|---|
| files | Array |
本批次上传的文件数组 |
| results | Array |
每个成功上传文件的服务器返回 |
| failResults | Array |
stopOnFail: false 或部分失败场景下的失败明细,包含 file / index / error |
| successCount | number | 上传成功数量 |
| failCount | number | 上传失败数量 |
错误码
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9011001 | platform unsupported | 当前平台不支持 |
| 9011002 | user cancelled | 用户取消选择 |
| 9011003 | permission denied | 平台权限不足 |
| 9011004 | count exceeded | 选择数量超过 maxCount |
| 9011005 | invalid file type | 文件类型不符合 accept |
| 9011006 | file size exceeded | 文件超过 maxSize 限制 |
| 9011007 | system error | 平台选择器异常或返回结构异常 |
| 9011008 | invalid upload options | 上传参数错误,例如 url 为空或文件路径为空 |
| 9011009 | upload failed | 上传失败,例如网络错误或 HTTP 非 2xx |
| 9011010 | upload aborted | 上传任务已取消 |
| 9011011 | upload file path convert failed | 上传前文件路径转换失败,例如 Android content:// 或 Harmony picker URI 无法复制到缓存/临时目录 |
示例
前面已经给出从简单到复杂的接入路径。这里保留常用扩展片段,完整页面结构、样式、错误提示、接口切换、取消上传和回调日志请看插件目录中的完整示例。
uni-app 调用示例
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// uni-app 页面中可以直接在 methods 或组合式函数里调用。
LizhaoChooseFile.pickFile({
accept: '*/*',
success(file) {
console.log('uni-app 选择成功', file)
}
})
uni-app x 调用示例
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// uni-app x 调用路径一致;App 端如新增业务 API 后旧基座未联编,请参考“自定义基座说明”。
LizhaoChooseFile.pickFiles({
accept: 'image/*',
multiple: true,
maxCount: 3,
success(files) {
console.log('uni-app x 选择成功', files)
}
})
手动上传示例
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// 手动上传适合“先选文件、表单确认后再上传”的业务流程。
LizhaoChooseFile.pickFiles({
accept: '.pdf,.doc,.docx,image/*',
multiple: true,
maxCount: 3,
success(files) {
const task = LizhaoChooseFile.uploadFiles({
files,
url: 'https://unidemo.dcloud.net.cn/upload',
name: 'file',
// 开启并发上传;如需严格按顺序上传,可改回 sequential: true。
sequential: false,
// 允许部分文件失败后继续上传,最终通过 failResults 定位失败文件。
stopOnFail: false,
// 测试接口返回 JSON 字符串时,插件会额外写入 parsedData,data 仍保留原文。
parseJson: true,
successStatusCodes: [200, 201, 204],
progress(progress) {
console.log('上传进度', progress.index + 1, progress.total, progress.progress)
},
success(res) {
console.log('手动上传成功', res)
console.log('失败明细', res.failResults)
},
fail(err) {
console.log('手动上传失败', err)
}
})
// 如需取消上传,保存 task 后调用 abort。
// task?.abort()
}
})
完整上传测试页面示例
完整页面源码已放在插件目录中,建议直接查看或复制:
E:\test\lizhao-plugin\uni_modules\lizhao-choose-file\example\uniapp\chooseFile.vue
该示例页覆盖以下链路:
- 上传接口切换:DCloud 测试接口、httpbin 回显接口、空 URL 错误测试。
- 基础 API:pickFile / pickFiles / uploadFiles / pickAndUploadFiles。
- 业务封装 API:pickAndUploadBusinessFiles。
- 可选业务组件:
,包含 business / simple / headless 三种 UI 模式、上传进度、文件数量、删除文件、图片缩略图、点击预览、取消上传等能力。
业务场景封装 API 示例
import * as LizhaoChooseFile from '@/uni_modules/lizhao-choose-file'
// 业务附件上传:插件会按 attachment 场景生成默认 accept、数量和文件名模板。
const task = LizhaoChooseFile.pickAndUploadBusinessFiles({
scene: 'attachment',
maxCount: 3,
upload: {
url: 'https://unidemo.dcloud.net.cn/upload',
name: 'file',
parseJson: true,
successStatusCodes: [200, 201, 204],
progress(progress) {
console.log('业务上传进度', progress.index + 1, progress.total, progress.progress)
}
},
stateChange(state) {
console.log('业务流程状态', state.status, state.selectedCount, state.uploadTotal, state.overallProgress)
}
})
// task?.abort()
业务组件示例:business 内置业务 UI
<template>
<lizhao-choose-file
scene="document"
file-type="document"
mode="upload"
ui-mode="business"
:extensions="['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.txt', '.ofd']"
:upload-url="uploadUrl"
upload-name="file"
:parse-json="true"
:success-status-codes="[200, 201, 204]"
:show-progress="true"
:show-file-count="true"
:show-selected-list="true"
:show-remove="true"
:confirm-remove="true"
title="业务资料上传"
description="支持合同、表格、PDF 与 OFD,可删除后重新选择"
empty-text="还没有业务资料"
remove-text="删除"
@state-change="onChooseFileState"
@success="onChooseFileSuccess"
@fail="onChooseFileFail"
@remove="onChooseFileRemove"
/>
</template>
业务组件示例:simple 轻量 UI
<template>
<lizhao-choose-file
scene="image"
mode="pick"
ui-mode="simple"
:max-count="6"
button-text="选择图片"
:show-progress="false"
:show-file-count="true"
:show-selected-list="true"
:show-image-preview="true"
:preview-on-click="true"
@select="onImageSelect"
@preview="onImagePreview"
/>
</template>
图片场景默认开启缩略图展示。若传入 preview-on-click="true",点击缩略图会调用 uni.previewImage,组件也会触发 preview 事件,便于业务记录日志或埋点。
业务组件示例:headless 自定义 UI
<template>
<view class="custom-upload">
<button @click="chooseContract">选择合同并上传</button>
<lizhao-choose-file
ref="contractUploader"
scene="document"
mode="upload"
ui-mode="headless"
:upload-url="uploadUrl"
upload-name="file"
:parse-json="true"
:show-progress="false"
:show-file-count="false"
@state-change="onContractUploadState"
/>
</view>
</template>
<script>
export default {
data() {
return {
uploadUrl: 'https://unidemo.dcloud.net.cn/upload'
}
},
methods: {
chooseContract() {
// headless 模式不渲染内置 UI,业务按钮通过 ref 调用 choose。
this.$refs.contractUploader.choose()
},
onContractUploadState(state) {
console.log('自定义上传状态', state)
}
}
}
</script>
权限说明
- 文件选择使用平台系统选择器,通常无需额外申请存储权限。
- Android 上传
content://文件时会临时复制到应用缓存目录,不会写入公共存储。 - 上传能力需要网络访问权限,业务侧需确保服务器地址、域名白名单、小程序后台配置等已正确设置。
自定义基座说明
本插件未引入三方原生 SDK。Web 和小程序不需要自定义基座;App 普通文件选择和普通上传可沿用已包含对应插件能力的基座。
可靠上传队列新增了 Android、iOS、Harmony 平台 UTS 文件系统与网络监听实现。App 端必须重新运行原生联编,或制作包含最新插件代码的自定义基座;只更新 WGT / appResource 不能让旧基座获得这部分原生能力。若业务侧再加入原生网络 SDK、权限、Manifest、依赖或资源,也需要重新制作对应平台自定义基座。
本次业务封装新增了根 utssdk/index.uts 导出和 interface.uts 类型声明,App 端如果已经安装旧自定义基座,需要重新运行原生联编或重新制作对应平台自定义基座后,才能直接调用 pickBusinessFiles / pickAndUploadBusinessFiles。可选 <lizhao-choose-file /> 组件和示例页已内置旧基座兼容兜底:当当前运行包尚未暴露业务 API 代理时,会退回已稳定暴露的 pickFiles + uploadFiles 组合,继续展示进度条、文件数量、文件列表和取消上传状态。
可测试上传接口
示例页默认使用已验证可上传的 DCloud 测试接口。公开接口仅适合插件联调,不建议用于线上业务。
| 接口 | 用途 | 返回特点 |
|---|---|---|
https://unidemo.dcloud.net.cn/upload |
DCloud 官方示例上传接口 | 返回字符串 data 中包含 strings 和 files |
https://httpbin.org/post |
multipart 回显接口 | 返回字符串 data 中包含 form、files 和 headers |
测试建议:
| 场景 | 操作 | 预期 |
|---|---|---|
| 正常上传 | 使用 DCloud 测试接口选择文件上传 | success 返回 statusCode=200,data 为服务器原始字符串 |
| 表单回显 | 使用 httpbin 接口上传并传 parseJson: true |
data 中可看到原始字符串,parsedData 中可直接读取 form / files / headers |
| 并发上传 | 调用 uploadFiles 时传 sequential: false |
多个文件同时开始上传,进度回调中的 index 仍对应原始文件下标 |
| 部分失败 | 调用 uploadFiles 时传 stopOnFail: false |
success 返回 failResults,可按 index / file / error 定位失败文件 |
| 参数错误 | 将 url 置空后上传 |
fail 返回 9011008 |
| 取消上传 | 上传过程中调用 abort() |
fail 返回 9011010 |
| 非 2xx | 使用返回 404/500 的业务接口上传 | fail 返回 9011009 |
小程序端使用公开测试接口前,需要先在小程序后台配置合法域名;正式业务请替换为自己的服务端接口。
注意事项
- 上传目标只支持通用 HTTP 服务器,不内置 uniCloud 上传。
- 可靠队列不要求分片初始化、分片查询或文件合并接口;已成功文件会跳过,中断中的单个文件从头重传,不能宣传为字节级断点续传或后台常驻上传。
- 队列恢复前先重新提供有效的
resolveRequest;HTTP 401/403 会进入waiting-config,更新凭据并重新配置后再继续。 method固定为POST,底层按平台上传 API 的multipart/form-data语义执行。name默认值为file,如果后端使用其他字段名,请通过options.name或upload.name指定。header和formData都是普通对象;不要把 token、密钥、账号等敏感信息写死在示例代码或仓库中。- 发布版运行日志会保留中文阶段、错误码、文件名与来源平台,但不会输出完整上传 URL、本地路径、临时路径或 picker URI;业务侧需要完整链路信息时,请在自己的回调里按需记录。
accept支持扩展名与 MIME;对于application/zip、application/x-rar-compressed、application/vnd.rar、application/ofd、application/x-ofd等常见归档/OFD 类型,平台未返回 MIME 时会按扩展名兜底校验,避免误报9011005。- Web / H5 调试公开上传接口时,默认不要传
X-Demo等自定义请求头;部分公开接口不会在 CORS 预检响应中允许这些 header,浏览器会直接拦截上传。 - 服务器响应默认不会自动 JSON 解析;需要结构化响应时传
parseJson: true,插件会把解析成功的结果放入UploadSuccessItem.parsedData,同时保留data原文。 - 上传默认以 HTTP 200-299 视为成功;后端使用 201、204 或其他固定成功码时,可通过
successStatusCodes明确指定,传空数组则保持默认 2xx 规则。 - 多文件默认逐个上传,失败后停止;如需并发上传可传
sequential: false,如需跳过失败继续上传可传stopOnFail: false,最终通过UploadFilesResult.failResults查看失败明细。 progress是持续回调,App 和插件根公开上传入口通过@UTSJS.keepAlive按 UTS 要求保活;Web / H5 与小程序平台胶水层不重复使用装饰器,避免目标编译器报Decorators are not valid here。- Android 选择到
content://文件时,插件会先复制到应用缓存目录再上传;如果复制失败会返回9011011。 - iOS 选择到
file://路径时,插件会去掉前缀并做decodeURI后再上传。 - Harmony 选择到
file://media/Photo/...、file://docs...等系统 URI 时,插件会先打开授权文件并复制到应用临时目录再上传;如果复制失败会返回9011011。 - 示例中的公开测试接口只用于联调,不建议作为线上业务接口。
作者系列 UTS 插件
以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12618393
赞赏 1949
赞赏
京公网安备:11010802035340号