| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 | const qiniuUploader = require("./qiniuUploader");//七牛云上传文件命名export const randomChar = function(l, url = "") {	const x = "0123456789qwertyuioplkjhgfdsazxcvbnm";	let tmp = "";	let time = new Date();	for (let i = 0; i < l; i++) {		tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length);	}	return (		"file/" +		url +		time.getTime() +		tmp	);}//图片选择export const chooseImage = function(data) {	return new Promise((resolve, reject) => {		uni.chooseImage({			count: data.count || 9, //默认9			sizeType: data.sizeType || ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有			sourceType: data.sourceType || ['album', 'camera'], //从相册选择			success: function(res) {				resolve(res.tempFiles);			},			fail: err => {				reject({					errMsg: err.errMsg, 					errCode: err.errCode, 					statusCode: 0,				});			}		});	});}//视频选择export const chooseVideo = function(data) {	return new Promise((resolve, reject) => {		uni.chooseVideo({			sourceType: data.sourceType || ['album', 'camera'], //从相册选择			compressed: data.compressed || false, //是否压缩所选的视频源文件,默认值为 true,需要压缩。			maxDuration: data.maxDuration || 60, //拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。			camera: data.camera || 'back', //'front'、'back',默认'back'			success: function(res) {				let files = [{					path: res.tempFilePath				}];				// #ifdef APP-PLUS || H5 || MP-WEIXIN				files[0].duration = res.duration;				files[0].size = res.size;				files[0].height = res.height;				files[0].width = res.width;				// #endif				// #ifdef H5				files[0].name = res.name;				// #endif				resolve(files);			},			fail: err => {				reject({					errMsg: err.errMsg, 					errCode: err.errCode, 					statusCode: 0,				});			}		});	});}// 七牛云上传export const qiniuUpload = function(requestInfo, getQnToken) {	return new Promise((resolve, reject) => {		if (Array.isArray(requestInfo.files)) {			let len = requestInfo.files.length;			let fileList = new Array;			if (getQnToken) {				getQnToken(qnRes => {					/*					 *接口返回参数:					 *visitPrefix:访问文件的域名					 *token:七牛云上传token					 *folderPath:上传的文件夹					 *region: 地区 默认为:SCN					 */                    let prefixLen = qnRes.visitPrefix.length;                    if(qnRes.visitPrefix.charAt(prefixLen - 1) == '/'){                        qnRes.visitPrefix = qnRes.visitPrefix.substring(0, prefixLen - 1)                    }					uploadFile(0);					function uploadFile(i) {						let item = requestInfo.files[i];						let updateUrl = randomChar(10, qnRes.folderPath);						let fileData = {							fileIndex: i,							files: requestInfo.files,							...item						};						if (item.name) {							fileData.name = item.name;							let nameArr = item.name.split(".");							updateUrl += "." + nameArr[nameArr.length - 1];						}						// 交给七牛上传						qiniuUploader.upload(item.path || item, (res) => {							fileData.url = res.imageURL;							requestInfo.onEachUpdate && requestInfo.onEachUpdate({								url: res.imageURL,								...fileData							});							fileList.push(res.imageURL);							if (len - 1 > i) {								uploadFile(i + 1);							} else {								resolve(fileList);							}						}, (error) => {							reject(error);						}, {							region: qnRes.region || 'SCN', //地区							domain: qnRes.visitPrefix, // bucket 域名,下载资源时用到。							key: updateUrl,							uptoken: qnRes.token, // 由其他程序生成七牛 uptoken							uptokenURL: 'UpTokenURL.com/uptoken' // 上传地址						}, (res) => {							console.log(requestInfo);							requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));							// console.log('上传进度', res.progress)							// console.log('已经上传的数据长度', res.totalBytesSent)							// console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend)						});					}				});			} else {				reject({					errMsg: "请添加七牛云回调方法:getQnToken",					statusCode: 0				});			}		} else {			reject({				errMsg: "files 必须是数组类型",				statusCode: 0			});		};	});}// 服务器URL上传export const urlUpload = function(requestInfo, dataFactory) {	return new Promise((resolve, reject) => {		// 本地文件上传去掉默认Content-Type		if (requestInfo.header['Content-Type']) {			delete requestInfo.header['Content-Type'];		}		// 本地文件上传去掉默认Content-Type		if (requestInfo.header['content-type']) {			delete requestInfo.header['content-type'];		}		if (Array.isArray(requestInfo.files)) {			// #ifdef APP-PLUS || H5			let files = [];			let fileData = {				files: requestInfo.files,				name: requestInfo.name || "file"			};			requestInfo.files.forEach(item => {                let fileInfo = {                    name: requestInfo.name || "file",                };                if(item.path){                    fileInfo.uri = item.path;                } else {                    fileInfo.file = item;                }				files.push(fileInfo);			});			let config = {				url: requestInfo.url,				files: files,				header: requestInfo.header, //加入请求头				success: (response) => {					//是否用外部的数据处理方法					if (requestInfo.isFactory && dataFactory) {						//数据处理						dataFactory({							...requestInfo,							response: response,						}).then(data => {							requestInfo.onEachUpdate && requestInfo.onEachUpdate({								data: data,								...fileData							});							resolve(data);						},err => {							reject(err);						});					} else {						requestInfo.onEachUpdate && requestInfo.onEachUpdate({							data: response,							...fileData						});						resolve(response);					}				},				fail: (err) => {					reject(err);				}			};			if (requestInfo.data) {				config.formData = requestInfo.data;			}			const uploadTask = uni.uploadFile(config);			uploadTask.onProgressUpdate(res => {				requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));			});			// #endif			// #ifdef MP			const len = requestInfo.files.length - 1;			let fileList = new Array;			fileUpload(0);			function fileUpload(i) {				let item = requestInfo.files[i];				let fileData = {					fileIndex: i,					files: requestInfo.files,					...item				};				let config = {					url: requestInfo.url,					filePath: item.path,					header: requestInfo.header, //加入请求头					name: requestInfo.name || "file",					success: (response) => {						//是否用外部的数据处理方法						if (requestInfo.isFactory && dataFactory) {							//数据处理							dataFactory({								...requestInfo,								response: response,							}).then(data => {								fileList.push(data);								requestInfo.onEachUpdate && requestInfo.onEachUpdate({									data: data,									...fileData								});								if (len <= i) {									resolve(fileList);								} else {									fileUpload(i + 1);								}							},err => {								reject(err);							});						} else {							requestInfo.onEachUpdate && requestInfo.onEachUpdate({								data: response,								...fileData							});							fileList.push(response);							if (len <= i) {								resolve(fileList);							} else {								fileUpload(i + 1);							}						}					},					fail: (err) => {						reject(err);					}				};				if (requestInfo.data) {					config.formData = requestInfo.data;				}				const uploadTask = uni.uploadFile(config);				uploadTask.onProgressUpdate(res => {					requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));				});			}			// #endif		} else {			reject({				errMsg: "files 必须是数组类型",				statusCode: 0			});		}	});}
 |