uniapp文件选择上传插件已更新3.0版,API式调用,支持所有文件!

199 阅读3分钟

之前2.0版插件虽然解决了大部分人在uniapp选择文件上传的问题,但因为是webview实现,将点击层定位到页面按钮上,还是有缺陷,例如页面如果有固定的内容,会被webview遮挡导致误触发文件选择;例如页面上按钮位置重排需要调用组件的刷新位置重新定位;iOS和H5端需要接口放开跨域等;

基于以上等问题,我将2.0重构了,现在3.0版直接使用js调用组件的方法,不再需要关心定位问题,并且组件新增了文件相关实用方法如:

选择文件、上传文件、获取文件临时路径、base64、ArrayBuffer、文件切片、打开文件等。

力求简化开发,让选择文件上传不再复杂,以下是文档,需要的小伙伴点击查看

🎯 全能文件选择上传插件地址:https://ext.dcloud.net.cn/plugin?id=5459

3.0版文档

API式调用选择器,支持pdf、doc、zip...等所有类型文件

props

属性是否必填值类型默认值说明
debugBooleanfalse开启调试日志
distinctBooleanfalse同名文件是否覆盖

API

方法名参数支持平台说明
chooseFilechooseFile参数说明App/H5/微信小程序文件选择
uploadupload参数说明App/H5/微信小程序文件上传
getTempFilePath文件处理参数说明App/H5/微信小程序获取文件临时路径
getBase文件处理参数说明App/H5/微信小程序获取文件base64
getArrayBuffer文件处理参数说明App/H5/微信小程序获取文件ArrayBuffer
openDocument文件处理参数说明App/H5/微信小程序打开文件
abortfileApp/H5/微信小程序中断上传
deletedfileApp/H5删除文件
clear-App/H5清空文件

chooseFile参数说明 Object

参数名类型必填默认值说明
countNumber9允许选择的文件个数
sizeNumber10单个文件大小上限,单位兆(M)
multipleBooleantrue是否允许多选(count=1时强制禁止多选)
formatsString-允许选择的格式,空串等于不限制,多个以逗号隔开,例如 'png,jpg,jpeg'
acceptString-原生input file属性,控制系统弹框可选文件类型展示
successFunction-成功回调
failFunction-失败回调

upload参数说明 Object

参数名类型必填默认值说明
fileObject-chooseFile返回的file
urlString-上传文件的服务端接口地址
nameString'file'服务端接收文件字段的key
methodString'post'请求协议类型
headerObject-HTTP 请求 Header
formDataObject-HTTP 请求中其他额外的 form data
onprogressFunction-上传进度回调(持续)
successFunction-成功回调
failFunction-失败回调

文件处理参数说明

参数名类型必填默认值说明
fileObject-chooseFile返回的file
successFunction-成功回调
failFunction-失败回调

3.0版使用示例

<template>
	<view>
            <lsj-upload debug ref="lsjUploadRef"></lsj-upload>
		
            <view style="padding: 8rpx 60rpx;">
                    <button @click="onClick">chooseFile (选择文件)</button>
            </view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				files: [],
                                tempFilePath: '',
                                base64: ''
			}
		},
		onLoad() {

		},
		methods: {
			// 选择文件
			onClick() {
				this.$refs.lsjUploadRef.chooseFile({
					count: 2,
					size: 8,
					success:(files) => {
						this.files = files;
						console.log('files',files);
						this.files.forEach(file=> {
							// 上传到服务器(使用组件内upload需要接口支持跨域)
							// this.uploadHandle(file);
                                                        
                                                        // 获取文件地址(如接口不支持跨域,
                                                        // 可调以下方法获取文件地址后调uni.uploadFile上传)
                                                        // this.getTempFilePath(file);
						})
					}
				})
			},
			// 上传到服务器
			uploadHandle(file) {
				this.$refs.lsjUploadRef.upload({
					url: 'http://lsj.tech.com/dropbox/document/upload', //替换成你的接口地址
					file,
					name: 'file',
					method: 'post',
					header: {},
					formData: {},
					onprogress:(e)=> {
						file.status = 'progress';
						console.log('上传中:',e);
					},
					success:(e) => {
						file.status = 'success';
						console.log('上传成功',e);
					},
					fail:(e) => {
						file.status = 'fail';
						console.log('上传失败',e);
					}
				});
			},
			// 获取文件TempFilePath
			getTempFilePath(file) {
				this.$refs.lsjUploadRef.getTempFilePath({
					file,
					success:(e) => {
						this.tempFilePath = e.result;
					}
				});
			},
			// 获取文件base64
			getBase(file) {
				this.$refs.lsjUploadRef.getBase({
					file,
					success:(e) => {
						// #ifndef MP
							this.base64 = e.result;
						// #endif
						// #ifdef MP
							this.base64 = 'data:image/png;base64,' + e.result;
						// #endif
					}
				});
			},
			// 获取文件ArrayBuffer
			getArrayBuffer(file) {
				this.$refs.lsjUploadRef.getArrayBuffer({
					file,
					success:(e) => {
						console.log('ArrayBuffer',e.result);
					}
				});
			},
			// 打开文件
			openDocument(file) {
				this.$refs.lsjUploadRef.openDocument({
					file,
					success:(e) => {
						console.log('打开文件成功');
					}
				});
			},
			// 终止上传文件
			onAbort(file) {
				if (file.status === 'progress') {
					this.$refs.lsjUploadRef.abort(file);
				}
			},
			// 删除指定文件
			del(index) {
                           // 删除页面上文件列表时需要将组件内缓存的文件一并删除
				this.$refs.lsjUploadRef.deleted(this.files[index]);
				this.files.splice(index,1);
			},
			// 清空所有文件
			clear() {
				this.$refs.lsjUploadRef.clear();
				this.files = [];
			},
		}
	}
</script>


插件版本对比:

【3.0版(功能全面,操作简单,物超所值!)】
【2.0版(开发较复杂,场景限制)】
【1.0版(满足基础需求,性能低)】
所有插件均支持App [ Android、iOS ]、 微信小程序、H5应用