uniapp上传图片,上传视频,上传文件归总

5 篇文章 0 订阅
1 篇文章 0 订阅

uniapp上传图片,上传视频,上传文件归总

以下方法兼容h5、小程序、app

创建通用上传方法upload.js

/* 
* 选择图片
* count:上传图片数量
* sourceType: 1.从相册选图,2.使用相机 3.二者都有
* callback:回调
*/
function chooseImage(callback,count=9,sourceType=3) {
	let that = this
	var sourceType = ['album', 'camera']
	if(sourceType==1){
		sourceType = ['album']
	}else if(sourceType==2){
		sourceType = ['camera']
	}
	uni.chooseImage({
		count: count,  // 最多可以选择的图片张数,默认9
		sizeType: ['compressed'], // original 原图,compressed 压缩图,默认二者都有
		sourceType: sourceType, // album 从相册选图,camera 使用相机,默认二者都有
		success: function (res) {
			console.log(res,'chooseImage')
			callback && callback(res)
			// 上传图片用到res.tempFilePaths,这个是列表多个图需循环上传
		}
	})
}

/* 
* 选择视频
* sourceType: 1.从相册选视频,2.使用相机拍摄 3.二者都有
* callback:回调
*/
function chooseVideo(callback,sourceType=3) {
	let that = this
	var sourceType = ['album', 'camera']
	if(sourceType==1){
		sourceType = ['album']
	}else if(sourceType==2){
		sourceType = ['camera']
	}
	uni.chooseVideo({
		sourceType: sourceType, // album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera']
		success: function (res) {
			console.log(res,'chooseVideo')
			callback && callback(res)
			// 上传视频用到res.tempFilePath
		}
	})
}

/* 
* 选择文件
* count:上传数量
* callback:回调
*/
function chooseFile(callback,count=1) {
	// #ifdef MP-WEIXIN
	wx.chooseMessageFile({
	    count: count,
	    success: function (res) {
	    	console.log(res,'chooseFile');
	    	callback && callback(res)
	    }
	})
	// #endif
	// #ifdef H5
	// 需要hx2.9.9以上才支持uni.chooseFile
	uni.chooseFile({
	    count: count,
	    success: function (res) {
	    	console.log(res,'chooseFile');
	    	callback && callback(res)
	    }
	})
	// #endif
}

/* 
* 文件上传
* filePath:临时上传路径
* type:1.图片上传、2.视频上传 3.文件上传
* formData:其他参数
*/
function uploadFilePromise(filePath,type=1,formData={type:'image'}) {
	var url = 'https://www.baidu.com/YmUpload_image' //上传图片域名
	if(type==2){
		url = 'https://www.baidu.com/YmUpload_videoFile' //上传文件、视频域名
	}
	return new Promise((resolve, reject) => {
		let a = uni.uploadFile({
			url: url, // 上传接口
			filePath: filePath,
			name: 'file',
			formData: formData,
			success: (res) => {
				console.log(res,'uploadFilePromise')
				// #ifdef MP-BAIDU
				var data = res.data
				// #endif
				// #ifndef MP-BAIDU
				var data = JSON.parse(res.data)
				// #endif
				if(data.code==1){
					resolve(data.data)
				}else{
					resolve()
					uni.$u.toast(data.msg || '上传出错')
				}
			},fail(err) {
				uni.$u.toast(err.errMsg)
			}
		});
	})
}

export {
	chooseImage,       //选择图片
	chooseVideo,       //选择视频
	chooseFile,        //选择文件
	uploadFilePromise, //上传
}

使用方法

首先引用upload.js

import {chooseImage,chooseVideo,chooseFile,uploadFilePromise} from '@/plugins/upload/upload';

上传图片

chooseImage(res=>{
	var name = res.tempFiles[0].name
	uni.showLoading({
		title:"上传中..."
	})
	uploadFilePromise(res.tempFilePaths[0]).then(data=>{
		uni.hideLoading()
		//此处是获取到图片后逻辑
		console.log(data.url)
	}).catch(err=>{
		uni.hideLoading()
	})
})

上传视频

chooseVideo(res=>{
	var name = res.name
	uni.showLoading({
		title:"上传中..."
	})
	//控制视频大小
	if(res.size>=100*1024*1024){
		this.$u.toast('视频不能超过100M')
		uni.hideLoading()
		return
	}
	uploadFilePromise(res.tempFilePath,2).then(data=>{
		uni.hideLoading()
		//此处是获取到视频后逻辑
		console.log(data.url)
	}).catch(err=>{
		uni.hideLoading()
	})
})

上传文件

chooseFile(res=>{
	res.tempFilePaths.forEach((file,index)=>{
		var name = res.tempFiles[index].name //文件名称
		uni.showLoading({
			title:"上传中..."
		})
		uploadFilePromise(file,3).then(data=>{
			//此处是获取到视频后逻辑
			console.log(data.url)
		}).catch(err=>{
			uni.hideLoading()
		})
	})
},1)

参考项目:https://ext.dcloud.net.cn/plugin?id=7164

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值