Upload 文件上传

用于图片上传的组件,支持多图上传、图片预览、上传进度等功能。支持APP端权限检查、图片压缩等特性。

代码示例

				 
 <template>
 	<zk-theme type="page" :padding="30" showBack navbarTitle="图片选择上传">

 		<!-- 基础用法 -->
 		<zk-theme type="card" :padding="30" :radius="16" margin="0 0 40rpx 0">
 			<view class="demo-header">
 				<view class="demo-title-wrap">

 					<zk-text type="secondary" :size="28" weight="bold" margin="0 0 20rpx 0" text="基础用法" />

 				</view>
					<zk-text type="secondary" :size="28" weight="bold" margin="0 0 20rpx 0" text="最多可上传9张图片,支持预览、删除等操作" />
 				 
 			</view>
 			<view class="demo-content">
 				<zk-upload :file-list="fileList1" :max-count="9" upload-text="上传图片" :upload-directly="false"
 					@on-choose="handleChooseFiles" add-icon="add-large-line" add-icon-color="#2979ff"
 					:upload-url="uploadUrl" @select="onSelect1" @success="onSuccess1" @fail="onFail"
 					@remove="onRemove1" />
 			</view>
 		</zk-theme>



 	</zk-theme>
 </template>

 <script>
 	export default {
 		data() {
 			return {
 				// 上传接口地址
 				uploadUrl: 'https://your-upload-url',
 				// 基础用法
 				fileList1: [],
 				// 自定义样式
 				fileList2: [],
 				// 身份证
 				idCardFront: [],
 				idCardBack: [],
 				// 头像
 				avatar: [],
 				// 营业执照
 				license: [],
 				// 门店照片
 				store: []
 			}
 		},

 		methods: {
 			handleChooseFiles(files) {
 				// 这里可以获取到选择的文件信息
 				console.log('选择的文件:', files)
 				// 可以进行自定义处理
 			},
 			// 基础用法
 			onSelect1(files) {
 				files.forEach(file => {
 					this.fileList1.push(file)
 				})
 			},
 			onSuccess1({
 				file,
 				res
 			}) {
 				const index = this.fileList1.indexOf(file)
 				this.fileList1[index] = {
 					...file,
 					url: res.data.url // 根据实际接口返回格式调整
 				}
 			},
 			onRemove1({
 				index
 			}) {
 				this.fileList1.splice(index, 1)
 			},

 			// 自定义样式
 			onSelect2(files) {
 				files.forEach(file => {
 					this.fileList2.push(file)
 				})
 			},
 			onSuccess2({
 				file,
 				res
 			}) {
 				const index = this.fileList2.indexOf(file)
 				this.fileList2[index] = {
 					...file,
 					url: res.data.url
 				}
 			},
 			onRemove2({
 				index
 			}) {
 				this.fileList2.splice(index, 1)
 			},

 			// 身份证正面
 			onSelectFront(files) {
 				this.idCardFront = files
 			},
 			onSuccessFront({
 				file,
 				res
 			}) {
 				this.idCardFront = [{
 					...file,
 					url: res.data.url
 				}]
 			},
 			onRemoveFront() {
 				this.idCardFront = []
 			},

 			// 身份证反面
 			onSelectBack(files) {
 				this.idCardBack = files
 			},
 			onSuccessBack({
 				file,
 				res
 			}) {
 				this.idCardBack = [{
 					...file,
 					url: res.data.url
 				}]
 			},
 			onRemoveBack() {
 				this.idCardBack = []
 			},

 			// 头像上传
 			onSelectAvatar(files) {
 				this.avatar = files
 			},
 			onSuccessAvatar({
 				file,
 				res
 			}) {
 				this.avatar = [{
 					...file,
 					url: res.data.url
 				}]
 			},
 			onRemoveAvatar() {
 				this.avatar = []
 			},

 			// 营业执照
 			onSelectLicense(files) {
 				this.license = files
 			},
 			onSuccessLicense({
 				file,
 				res
 			}) {
 				this.license = [{
 					...file,
 					url: res.data.url
 				}]
 			},
 			onRemoveLicense() {
 				this.license = []
 			},

 			// 门店照片
 			onSelectStore(files) {
 				files.forEach(file => {
 					this.store.push(file)
 				})
 			},
 			onSuccessStore({
 				file,
 				res
 			}) {
 				const index = this.store.indexOf(file)
 				this.store[index] = {
 					...file,
 					url: res.data.url
 				}
 			},
 			onRemoveStore({
 				index
 			}) {
 				this.store.splice(index, 1)
 			},

 			// 统一的失败处理
 			onFail({
 				file,
 				error
 			}) {
 				uni.showToast({
 					title: error.message || '上传失败',
 					icon: 'none'
 				})
 			}
 		}
 	}
 </script>

 <style>


 </style>
			

API

Props 属性

参数 说明 类型 默认值
fileList 已上传的文件列表 Array []
maxCount 最大上传数量 number / string 9
maxSize 单个文件大小限制,单位 MB number / string 10
imageMode 图片裁剪、缩放模式 string aspectFill
autoUpload 是否在选择后立即上传 boolean true
addIcon 上传按钮图标 string add-large-line
addIconSize 上传按钮图标大小 number / string 40
addIconColor 上传按钮图标颜色 string #c0c4cc
uploadText 上传按钮文字 string ''
sourceType 图片选择来源 Array ['album', 'camera']
quality 图片压缩质量 number / string 80
uploadUrl 上传接口地址 string ''
name 上传文件的字段名 string file
formData 上传时附带的额外参数 object {}
header 上传的请求头 object {}
uploadDirectly 是否直接上传文件(true:直接上传, false:返回文件信息给父组件) boolean true
permissionConfig 权限配置对象,用于自定义APP端权限请求的提示文案 object 见下方权限配置说明

权限配置说明

{
      title: '授权提示',
      content: '您未开启相册权限,是否去开启?',
      confirmText: '去开启',
      cancelText: '取消',
      camera: {
          title: '相机权限使用',
          content: '我们需要使用您的相机权限来拍照,请允许开启相机权限'
      },
      album: {
          title: '相册权限使用',
          content: '我们需要使用您的相册权限来选择图片,请允许开启相册权限'
      }
  }

Events 事件

事件名 说明 回调参数
select 选择图片后触发 files: 选择的文件列表
before-upload 上传前触发 file: 上传的文件
progress 上传进度变化时触发 { file, progress }
success 上传成功时触发 { file, res }
fail 上传失败时触发 { file, error }
remove 删除文件时触发 { file, index }
on-choose 选择文件后触发(仅在uploadDirectly为false时) files: 选择的文件列表

Methods 方法

方法名 说明 参数
uploadFiles 手动上传文件列表 files: 要上传的文件列表
onRetry 重试上传失败的文件 file: 要重试的文件

文件数据结构

键名 说明 类型
url 文件路径 string
status 文件状态,可选值:ready / uploading / success / failed string
progress 上传进度 number
file 原始文件对象 object