|
|
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(err); } }); }); } //视频选择
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(err); } }); }); } // 七牛云上传
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) { console.log('urlUpload',requestInfo); 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)) { console.log('requestInfo.files',requestInfo.files); // #ifdef MP
console.log('456mp') const len = requestInfo.files.length - 1; let fileList = new Array; fileUpload(0);
function fileUpload(i) { console.log('fileUpload'); let item = requestInfo.files[i]; let fileData = { fileIndex: i, files: requestInfo.files, ...item }; let config = { url: requestInfo.url, filePath: item.path, files:requestInfo.files, header: requestInfo.header, //加入请求头
name: requestInfo.name || "file", success: (response) => { console.log('456123'); //是否用外部的数据处理方法
if (requestInfo.isFactory && dataFactory) { console.log('waibu'); //数据处理
dataFactory({ ...requestInfo, response: response, }).then(data => { console.log('data888',data); fileList.push(data); requestInfo.onEachUpdate && requestInfo.onEachUpdate({ data: data, ...fileData }); if (len <= i) { resolve(fileList); } else { fileUpload(i + 1); } },err => { reject(err); }); } else { console.log('nb'); 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 }); } }); console.log('urlUploadEND'); }
|