Files
2025-04-30 14:08:39 +08:00

280 lines
7.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
message
} from './message.js'
import {
host,
SERIAL,
API_VERSION,
SERVER_TYPE
} from '../config.js'
import {
http
} from '@/common/api/index.js';
import dayjs from '@/libs/day.js'
const getUUID = () => {
const S4 = () => ((((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1))
return (S4() + S4() + '' + S4() + '' + S4() + '' + S4() + '' + S4() + S4() + S4()) + new Date().getTime()
}
// 获取文件后缀名
const getSuffix = (fileName) => {
let pos = fileName.lastIndexOf('.')
return pos != -1 ? fileName.substring(pos) : ''
}
/* 判断url路径处理 */
function posUrl(url) {
let newUrl = ''
if (/(http|https):\/\/([\w.]+\/?)\S*/.test(url)) {
newUrl = url
} else {
newUrl = `${host}/api/${url}`
}
return newUrl
}
// 赛诸葛上传
class SaiZhuGeUploadFiles {
/**
* [constructor description]
* @param {[Array]} files [chooseImg选中的tempFilePaths、chooseVideo选中的rempFilePath]
* @param {[Object]} json [success每上传成功一张调用 complete全部上传完成调用]
* @return {[void]} [description]
*/
constructor(files, json) {
if (!Array.isArray(files)) {
throw new Error('Class UploadFileToOSS parameter must be an array');
}
this.data = [];
this.fn = json.success;
this.complete = json.complete;
this.files = files;
this.fileLen = this.files.length;
this.curIndex = 0;
this.resData = false;
uni.showLoading({
title: '加载中',
mask: true
})
if (!this.resData) this.getUploadConfig()
}
async getUploadConfig() {
try {
let {
data: {
code,
msg,
data
}
} = await http.post(global.apiUrls.queryAutograph, {
member_id: API_VERSION.replace(/\D/g, "")
})
if (code != 1) {
uni.hideLoading()
message.info(msg)
return
}
this.resData = data
this.uploadFile()
} catch (error) {
uni.hideLoading()
message.info(msg)
}
}
uploadFile() {
let resData = this.resData
const fileInfo = this.files[this.curIndex]
let allowUploadFile = this.uploadVerification(fileInfo, resData.is_public, +resData.size)
if (allowUploadFile !== true) {
uni.hideLoading()
return message.info('文件超出大小限制')
}
// deploy 1 本地服务器上传 否则 上传至oss
if (resData.deploy == 1) this.uploadFileToLocal(resData)
else this.uploadFileToOSS(resData)
}
// oss 上传验证
uploadVerification(file, isPublic = 1, size = 2048) {
const fileName = file.name
let isSizt = isPublic === 1 ? file.size / 1024 < size : true
if (!isSizt) return false
return true
}
// 本地上传
uploadFileToLocal(resData) {
let fileInfo = this.files[this.curIndex]
uni.uploadFile({
url: posUrl(global.apiUrls.UPLOAD_IMAGE_URL),
filePath: fileInfo.path,
name: 'file',
// #ifdef MP-DINGTALK
fileType: "image",
// #endif
header: {
'user-token': global.token || '',
'Accept-Language': global.locale,
'Accept-Serial': SERIAL,
},
formData: {
'module': '',
'dir': resData.dir || ''
},
success: res => {
let data = JSON.parse(res.data);
if (data.code == 1) {
this.data.push({
name: fileInfo.name,
...data.data[0]
});
if (this.fn) this.fn(this.data);
} else {
message.info('上传失败,请重试')
}
},
complete: () => {
this.curIndex++; // 这个图片执行完上传后,开始上传下一张
if (this.curIndex >= this.fileLen) { // 当图片传完时,停止调用
this.complete(this.data);
uni.hideLoading()
} else { // 若图片还没有传完,则继续调用函数
this.uploadFile();
}
}
});
}
// oss上传
uploadFileToOSS(ossData) {
const fileInfo = this.files[this.curIndex]
let joint = getUUID()
let fileName = `${joint}${getSuffix(fileInfo.name ?? fileInfo.path)}`
let filePath = `${ossData.dir}${dayjs(new Date()).format('YYYY-MM-DD')}/${fileName}`
let fileNetworkPath = `${ossData.host}/${filePath}`
uni.uploadFile({
url: ossData.host,
filePath: fileInfo.path,
// #ifdef MP-DINGTALK
fileType: "image",
// #endif
name: 'file',
formData: {
key: filePath, // 文件名
policy: ossData.policy, // 后台获取超时时间
OSSAccessKeyId: ossData.accessid, // 后台获取临时ID
success_action_status: 200, // 让服务端返回200,不然默认会返回204
signature: ossData.signature // 后台获取签名
},
success: res => {
console.log(res);
if (res.statusCode == 200) {
this.data.push({
id: fileNetworkPath,
name: fileInfo.name || fileName,
path: fileNetworkPath,
thumb: fileNetworkPath + '?x-oss-process=video/snapshot,t_1000,m_fast',
})
if (this.fn) this.fn(this.data);
} else {
message.info('上传失败,请重试')
}
},
fail(err) {
console.log(err);
},
complete: () => {
this.curIndex++; // 当前文件执行完上传后,开始上传下一张
if (this.curIndex >= this.fileLen) { // 当文件传完时,停止调用
this.complete(this.data);
uni.hideLoading()
} else { // 若文件还没有传完,则继续调用函数
this.uploadFile();
}
}
})
}
}
// 普通上传
class OrdinaryUploadFiles {
/**
* [constructor description]
* @param {[Array]} files [chooseImg选中的tempFilePaths]
* @param {[Object]} json [success每上传成功一张调用 complete全部上传完成调用]
* @return {[void]} [description]
*/
constructor(files, json) {
if (!Array.isArray(files)) {
throw new Error('Class UploadImg parameter must be an array');
}
let _this = this;
_this.data = [];
_this.fn = json.success;
_this.url = json.url ? host + '/api' + json.url : host + '/api' + global.apiUrls.UPLOAD_IMAGE_URL;
console.log(_this.url)
_this.complete = json.complete;
_this.files = files;
_this.formData = json.formData || {};
_this.fileLen = _this.files.length;
_this.curIndex = 0;
uni.showLoading({
// title: '上传中'
title: global.i18n.t('上传中')
});
console.log(111111111111111)
_this.upload();
}
upload() {
uni.uploadFile({
url: this.url,
filePath: this.files[this.curIndex].path,
name: 'file',
header: {
'user-token': global.token || '',
'Accept-Language': global.locale,
'Accept-Serial': SERIAL,
},
formData: {
'module': '',
'dir': '',
...this.formData
},
success: res => {
let data = JSON.parse(res.data);
if (data.code == 1) {
let file = Array.isArray(data.data) ? data.data[0] : data.data
file.thumb = file.path + '?x-oss-process=video/snapshot,t_1000,m_fast'
this.data.push(file);
if (this.fn) this.fn(this.data);
} else {
message.info(global.i18n.t('上传失败,请重试'))
}
},
complete: () => {
this.curIndex++; // 这个图片执行完上传后,开始上传下一张
if (this.curIndex >= this.fileLen) { // 当图片传完时,停止调用
this.complete(this.data);
uni.hideLoading()
} else { // 若图片还没有传完,则继续调用函数
this.upload();
}
}
});
}
}
let UploadFiles = null
switch (SERVER_TYPE) {
case 0: //赛诸葛
UploadFiles = SaiZhuGeUploadFiles
break;
case 1: //java
UploadFiles = OrdinaryUploadFiles
break;
default:
UploadFiles = OrdinaryUploadFiles
break;
}
export default UploadFiles