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
- });
- }
- });
- }
|