UNPKG

@aliretail/react-material-selector

Version:
446 lines (360 loc) 13.3 kB
import _Button from "@alifd/next/es/button"; import _Message from "@alifd/next/es/message"; import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { useRef, forwardRef, useState } from 'react'; // import OssUploader from '@alife/ali-oss-uploader'; import axios from 'axios'; import './index.scss'; export var OssUploader = function OssUploader(props, ref) { var num = Math.random(); var _props$treeId = props.treeId, treeId = _props$treeId === void 0 ? '' : _props$treeId, treeIdTwo = props.treeIdTwo, tabTypeValue = props.tabTypeValue, contentFlag = props.contentFlag, _props$btnName = props.btnName, btnName = _props$btnName === void 0 ? '上传' : _props$btnName, loadData = props.loadData; var ccc = treeIdTwo[0] ? treeIdTwo[0].id : ''; var fileRef = useRef(); // 获取允许上传的文件类型 var getFileType = function getFileType() { var arr = ['image/jpg,image/jpeg,image/jpe,image/bmp,image/gif,image/png', 'image/svg+xml', 'video/mp4', '', '', '']; return arr[tabTypeValue - 1]; }; var save = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(fileName, fileUrl, thumbUrl, fileSize) { var res; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: delete axios.defaults.xsrfCookieName; delete axios.defaults.xsrfHeaderName; _context.next = 4; return axios({ method: 'post', url: props.apis.materialCreate, data: { dirId: treeId, title: fileName, fileName: fileName, fileUrl: fileUrl, thumbUrl: thumbUrl, fileSize: fileSize || 0, apiContext: { belongOrganizationId: props.belongOrganizationId || '1' }, type: tabTypeValue || '' // 这个来区分不同的内容,图片、视频还是图标 } }); case 4: res = _context.sent; if (res.data.success) { // 上传成功 todo - 刷新页面 // changeFlag(num); if (loadData) { loadData(); } if (contentFlag) { contentFlag(true); } } case 6: case "end": return _context.stop(); } } }, _callee); })); return function save(_x, _x2, _x3, _x4) { return _ref.apply(this, arguments); }; }(); var isUploadVideo = function isUploadVideo(url) { var audioElement = new Audio(url); return new Promise(function (resolve) { audioElement.addEventListener('loadedmetadata', function (_event) { var _audioElement = audioElement, duration = _audioElement.duration; if (props.videoUploadDuration) { if (duration > props.videoUploadDuration) { _Message.error("" + videoUploadDurationErrorMessage); // 商品 fileRef.current.value = ''; resolve(false); } } resolve(true); audioElement = null; }); }); }; // 获取像素 var getImgUrl = function getImgUrl(url) { var image = new Image(); var iw; var ih; return new Promise(function (resolve) { image.onload = function () { // 异步方法就没有获取到长宽高 iw = image.width; // 图片宽度 ih = image.height; // 图片高度 var flagOne = true; var flagTwo = true; if (props.imgWidth) { if (iw != props.imgWidth) { _Message.error("" + props.imgWidthErrorMessage); flagOne = false; } } if (props.imgHeight && flagOne) { if (ih != props.imgHeight) { _Message.error("" + props.imgHeightErrorMessage); flagTwo = false; } } if (!flagOne || !flagTwo) { resolve(false); } resolve(true); image = null; }; image.src = url; }); }; var multipleUpload = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(file) { var type, url, flag, canUpload, params, getOssSignature, onUploadProgress, ossSignature, formData, getUrl, thumbUrl; return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: delete axios.defaults.xsrfCookieName; delete axios.defaults.xsrfHeaderName; type = file.name.split('.').pop(); if (!(tabTypeValue == 1)) { _context2.next = 23; break; } if (!props.imgType) { _context2.next = 9; break; } if (!(props.imgType.indexOf(type.toLowerCase()) === -1)) { _context2.next = 9; break; } // Message.error('只允许上传.jpg/.jpeg/.jpe/.bmp/.gif/.png格式的图片')//飞鹤和恒安 // Message.error('只允许上传.jpg/.jpeg/.png格式的图片');//商品 _Message.error(props.imgTypeErrorMessage); // 透出 fileRef.current.value = ''; return _context2.abrupt("return"); case 9: if (!props.imgUploadSize) { _context2.next = 14; break; } if (!(file.size > props.imgUploadSize)) { _context2.next = 14; break; } _Message.error("" + props.imgUploadSizeErrorMessage); // 商品 fileRef.current.value = ''; return _context2.abrupt("return"); case 14: // 上传尺寸限制 url = URL.createObjectURL(file); _context2.next = 17; return getImgUrl(url); case 17: flag = _context2.sent; if (!(flag == false)) { _context2.next = 21; break; } fileRef.current.value = ''; return _context2.abrupt("return"); case 21: _context2.next = 53; break; case 23: if (!(tabTypeValue == 2)) { _context2.next = 36; break; } if (!props.iconType) { _context2.next = 29; break; } if (!(props.iconType.indexOf(type) === -1)) { _context2.next = 29; break; } _Message.error(props.iconTypeErrorMessage); // 飞鹤 fileRef.current.value = ''; return _context2.abrupt("return"); case 29: if (!props.iconUploadSize) { _context2.next = 34; break; } if (!(file.size > props.iconUploadSize)) { _context2.next = 34; break; } _Message.error("" + props.iconUploadSizeErrorMessage); // 飞鹤和恒安 fileRef.current.value = ''; return _context2.abrupt("return"); case 34: _context2.next = 53; break; case 36: if (!(tabTypeValue == 3)) { _context2.next = 53; break; } if (!props.videoType) { _context2.next = 42; break; } if (!(props.videoType.indexOf(type) === -1)) { _context2.next = 42; break; } _Message.error(props.videoTypeErrorMessage); // 商品和飞鹤和恒安 fileRef.current.value = ''; return _context2.abrupt("return"); case 42: if (!props.videoUploadSize) { _context2.next = 47; break; } if (!(file.size > props.videoUploadSize)) { _context2.next = 47; break; } _Message.error("" + props.videoUploadSizeErrorMessage); // 商品 fileRef.current.value = ''; return _context2.abrupt("return"); case 47: // 时长验证,视频时长的不知道飞鹤有没有 url = URL.createObjectURL(file); _context2.next = 50; return isUploadVideo(url); case 50: canUpload = _context2.sent; if (canUpload) { _context2.next = 53; break; } return _context2.abrupt("return", false); case 53: // 2.获取签名 params = { bizName: props.bizName, bizType: props.bizType, fileName: file.name, fileSize: file.size, videoDuration: file.size }; _context2.next = 56; return axios({ method: 'post', url: props.apis.getOssSignature, data: params }); case 56: getOssSignature = _context2.sent; if (getOssSignature.data.success) { _context2.next = 61; break; } _Message.error("\u4E0A\u4F20\u5931\u8D25: " + getOssSignature.data.message); // 清空 fileRef.current.value = ''; return _context2.abrupt("return"); case 61: // 3.上传到oss onUploadProgress = function onUploadProgress() {}; ossSignature = getOssSignature.data.result.ossSignature; formData = new FormData(); formData.append('key', ossSignature.dir); formData.append('policy', ossSignature.policy); formData.append('OSSAccessKeyId', ossSignature.accessKeyId); formData.append('signature', ossSignature.signature); formData.append('success_action_status', '200'); formData.append('file', file); _context2.next = 72; return axios({ method: 'post', url: ossSignature.host, data: formData, onUploadProgress: onUploadProgress }); case 72: // 4.获取图片地址 getUrl = getOssSignature.data.result.fileUrl; thumbUrl = getOssSignature.data.result.thumbUrl; // console.log('getOssSignature', getOssSignature); // console.log('getUrl', getUrl); // console.log('thumbUrl',thumbUrl); // todo 调上传接口 _context2.next = 76; return save(file.name, getUrl, thumbUrl, file.size); case 76: if (fileRef && fileRef.current && fileRef.current.value) { fileRef.current.value = ''; // 加上后可以重复上传 } case 77: case "end": return _context2.stop(); } } }, _callee2); })); return function multipleUpload(_x5) { return _ref2.apply(this, arguments); }; }(); var upload = /*#__PURE__*/function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(e) { var file, i; return _regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: // 1.获取文件对象 file = e.target.files || e.dataTransfer.files; if (file.length > 1) { for (i = 0; i < file.length; i++) { // 再传一个i表示是数组里面的第几个 multipleUpload(file[i]); } } else { multipleUpload(file[0]); } case 2: case "end": return _context3.stop(); } } }, _callee3); })); return function upload(_x6) { return _ref3.apply(this, arguments); }; }(); return /*#__PURE__*/React.createElement("div", { className: "files-btn" }, /*#__PURE__*/React.createElement("input", { className: "file", ref: fileRef, type: "file", multiple: props.multiUpload ? 'multiple' : '', onChange: function onChange(e) { return upload(e); }, accept: getFileType() }), /*#__PURE__*/React.createElement("div", { className: "up-box" }, /*#__PURE__*/React.createElement(_Button, { className: "up-box-btn" }, btnName))); };