123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- // 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,
- count: 1, //选择数量
- 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);
- });
- };
|