合并线上代码
This commit is contained in:
177
uni_modules/xe-upload/tools/apis.js
Normal file
177
uni_modules/xe-upload/tools/apis.js
Normal file
@ -0,0 +1,177 @@
|
||||
// eslint-disable
|
||||
import { awaitWrap } from './tools';
|
||||
/**
|
||||
* 从本地相册选择图片或使用相机拍照
|
||||
* @param {object} config 参数详情 => https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage
|
||||
* @returns
|
||||
*/
|
||||
export const chooseImage = (config) => {
|
||||
return awaitWrap(
|
||||
new Promise((r, j) => {
|
||||
uni.chooseImage({
|
||||
...config,
|
||||
success: (res) => {
|
||||
const tmpFiles = res?.tempFiles.map((e) => ({
|
||||
tempFilePath: e.path,
|
||||
tempFile: e,
|
||||
size: e.size,
|
||||
name: e.name,
|
||||
type: e.type,
|
||||
fileType: 'image',
|
||||
}));
|
||||
return r({ type: 'image', ...res, tempFiles: tmpFiles });
|
||||
},
|
||||
fail: (err) => j({ mode: 'chooseImage', data: err }),
|
||||
});
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 拍摄视频或从手机相册中选视频,返回视频的临时文件路径
|
||||
* @param {object} config 参数详情 => https://uniapp.dcloud.net.cn/api/media/video.html#choosevideo
|
||||
* @returns
|
||||
*/
|
||||
export const chooseVideo = (config) => {
|
||||
return awaitWrap(
|
||||
new Promise((r, j) => {
|
||||
uni.chooseVideo({
|
||||
...config,
|
||||
success: (res) => {
|
||||
const tmpFiles = [{
|
||||
...res,
|
||||
tempFilePath: res.tempFilePath,
|
||||
tempFile: res.tempFile ?? {},
|
||||
size: res.size,
|
||||
name: res.name,
|
||||
type: res.tempFile?.type,
|
||||
fileType: 'video',
|
||||
}];
|
||||
return r({ type: 'video', tempFiles: tmpFiles });
|
||||
},
|
||||
fail: (err) => j({ mode: 'chooseVideo', data: err }),
|
||||
});
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 拍摄或从手机相册中选择图片或视频
|
||||
* @param {object} config 参数详情 => https://uniapp.dcloud.net.cn/api/media/video.html#choosemedia
|
||||
* @returns
|
||||
*/
|
||||
export const chooseMedia = (type, config) => {
|
||||
if (!type) return console.error('chooseMedia type cannot be empty');
|
||||
if (!uni.chooseMedia && type === 'image') return chooseImage(config);
|
||||
if (!uni.chooseMedia && type === 'video') return chooseVideo(config);
|
||||
return awaitWrap(
|
||||
new Promise((r, j) => {
|
||||
uni.chooseMedia({
|
||||
...config,
|
||||
mediaType: [type],
|
||||
success: (res) => r(res),
|
||||
fail: (err) => j({ mode: 'chooseMedia', data: err }),
|
||||
});
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 从本地选择文件(h5)
|
||||
* @param {object} config 参数详情 => https://uniapp.dcloud.net.cn/api/media/file.html#wx-choosemessagefile
|
||||
* @returns
|
||||
*/
|
||||
export const chooseFile = (config) => {
|
||||
return awaitWrap(
|
||||
new Promise((r, j) => {
|
||||
uni.chooseFile({
|
||||
...config,
|
||||
success: (res) => {
|
||||
const tmpFiles = res?.tempFiles.map((e) => {
|
||||
let tmpType = 'file';
|
||||
if (e.type.includes('image')) {
|
||||
tmpType = 'image';
|
||||
}
|
||||
if (e.type.includes('video')) {
|
||||
tmpType = 'video';
|
||||
}
|
||||
return {
|
||||
tempFilePath: e.path,
|
||||
tempFile: e,
|
||||
size: e.size,
|
||||
name: e.name,
|
||||
type: e.type,
|
||||
fileType: tmpType,
|
||||
};
|
||||
});
|
||||
return r({ type: 'file', ...res, tempFiles: tmpFiles });
|
||||
},
|
||||
fail: (err) => j({ mode: 'chooseFile', data: err }),
|
||||
});
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 从本地选择文件(微信小程序)
|
||||
* @param {object} config 参数详情 => https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMessageFile.html
|
||||
* @returns
|
||||
*/
|
||||
export const chooseMessageFile = (config) => {
|
||||
return awaitWrap(
|
||||
new Promise((r, j) => {
|
||||
wx.chooseMessageFile({
|
||||
...config,
|
||||
success: (res) => {
|
||||
const tmpFiles = res?.tempFiles.map((e) => ({
|
||||
...e,
|
||||
tempFilePath: e.path,
|
||||
fileType: e.type ?? 'file',
|
||||
}));
|
||||
return r({ type: 'file', ...res, tempFiles: tmpFiles });
|
||||
},
|
||||
fail: (err) => j({ mode: 'chooseMessageFile', data: err }),
|
||||
});
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 上传
|
||||
* @param {object} config 参数详情 => https://uniapp.dcloud.net.cn/api/request/network-file.html#uploadfile
|
||||
* @param {object} exts 选择的文件的数据
|
||||
* @returns {object} exts + response
|
||||
*/
|
||||
export const uploadFile = (config, exts = {}) => {
|
||||
return new Promise((r, j) => {
|
||||
uni.uploadFile({
|
||||
...config,
|
||||
success: (res) => r({ ...exts, response: JSON.parse(res.data) }),
|
||||
fail: (err) => j({ mode: 'uploadFile', data: err }),
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const appUploadFile = (config, exts = {}, onprogress) => {
|
||||
const { url, header, formData } = config;
|
||||
return new Promise((r, j) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', url, true);
|
||||
for (let key in header) {
|
||||
xhr.setRequestHeader(key, header[key]);
|
||||
}
|
||||
if (onprogress) {
|
||||
xhr.upload.onprogress = onprogress;
|
||||
}
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 200) {
|
||||
r({ ...exts, response: JSON.parse(xhr.responseText) });
|
||||
} else {
|
||||
j({ mode: 'uploadFile', data: { data: xhr.responseText, errMsg: 'uploadFile fail.' } });
|
||||
}
|
||||
}
|
||||
}
|
||||
xhr.send(formData);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user