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)