|
@@ -7,7 +7,7 @@ import axios from "axios";
|
|
|
import vueStore from "@/store";
|
|
|
import { logicConfig } from "@/logicConfig";
|
|
|
import { toolUtils } from "@/utils/toolUtils";
|
|
|
-import SparkMD5 from 'spark-md5';
|
|
|
+import SparkMD5 from "spark-md5";
|
|
|
|
|
|
var CancelToken = axios.CancelToken;
|
|
|
var cancel;
|
|
@@ -57,7 +57,12 @@ export class axiosUtils {
|
|
|
|
|
|
var _newParamStr = toolUtils.objectKeyToUrlParam(data);
|
|
|
|
|
|
- var newUrl = urlPrefix + '?' + _newParamStr + (_newParamStr ? '&' : '') + urlParamStr;
|
|
|
+ var newUrl =
|
|
|
+ urlPrefix +
|
|
|
+ "?" +
|
|
|
+ _newParamStr +
|
|
|
+ (_newParamStr ? "&" : "") +
|
|
|
+ urlParamStr;
|
|
|
|
|
|
let response = await this.customRequest(newUrl, {}, {}, "get");
|
|
|
return response;
|
|
@@ -130,11 +135,14 @@ export class axiosUtils {
|
|
|
} catch (err) {
|
|
|
// throw err;
|
|
|
console.error(err);
|
|
|
- return toolUtils.resultConstructor(logicConfig.resultObj.failure, null, '请求异常,' + err.message);
|
|
|
+ return toolUtils.resultConstructor(
|
|
|
+ logicConfig.resultObj.failure,
|
|
|
+ null,
|
|
|
+ "请求异常," + err.message
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 上传文件
|
|
|
* @param _paramobj 格式如下:
|
|
@@ -144,7 +152,7 @@ export class axiosUtils {
|
|
|
* oneUploadedCall 每上传完一个后的回调函数,函数参数为object,格式如下:{fileName:'文件名称',fileId:'文件ID'}
|
|
|
* userId:'不传时,默认会取vuex中user.id',
|
|
|
* files 数组或者object,示例
|
|
|
- * {
|
|
|
+ * {
|
|
|
* groupCode:'不传时,默认会取vuex中selectProject.groupCode',
|
|
|
* projectId:'不传时,默认会取vuex中selectProject.id',
|
|
|
* fileName:'文件名称',
|
|
@@ -152,7 +160,7 @@ export class axiosUtils {
|
|
|
* file:文件信息,假设有一个input type为file id为txtFile的标签,那么file为document.getElementById('txtFile').files[0]
|
|
|
* }
|
|
|
* }
|
|
|
- * @returns
|
|
|
+ * @returns
|
|
|
*/
|
|
|
protected async uploadFiles(_paramobj: any) {
|
|
|
//注意,这里的this 指向的是实例化的子类
|
|
@@ -160,6 +168,11 @@ export class axiosUtils {
|
|
|
let userId = _paramobj.userId || vueStore.state.user.id;
|
|
|
let fileServiceUrl = _paramobj.fileServiceUrl;
|
|
|
let files = _paramobj.files;
|
|
|
+ console.log(
|
|
|
+ "%c [ files ]: ",
|
|
|
+ "color: #bf2c9f; background: pink; font-size: 13px;",
|
|
|
+ files
|
|
|
+ );
|
|
|
try {
|
|
|
let waitFiles = files instanceof Array == true ? files : [files];
|
|
|
//上传成功的文件数量
|
|
@@ -167,45 +180,84 @@ export class axiosUtils {
|
|
|
|
|
|
for (let i = 0; i < waitFiles.length; i++) {
|
|
|
let _currFileObj = waitFiles[i];
|
|
|
-
|
|
|
+ console.log(
|
|
|
+ "%c [ _currFileObj ]: ",
|
|
|
+ "color: #bf2c9f; background: pink; font-size: 13px;",
|
|
|
+ _currFileObj
|
|
|
+ );
|
|
|
//获取文件md5
|
|
|
let fileContentMd5 = await getFileContentMd5(_currFileObj);
|
|
|
//获取文件上传地址
|
|
|
- let getUploadResult = await getUploadUrl(fileContentMd5 as string, _currFileObj);
|
|
|
+ let getUploadResult = await getUploadUrl(
|
|
|
+ fileContentMd5 as string,
|
|
|
+ _currFileObj
|
|
|
+ );
|
|
|
switch (getUploadResult.result) {
|
|
|
case logicConfig.resultObj.success:
|
|
|
let getUploadData = getUploadResult.data || {};
|
|
|
//uploadCode 200 代表已经上传过了; 201 代表需上传
|
|
|
- switch (getUploadData.uploadCode) {
|
|
|
+ switch (getUploadData.uploadCode) {
|
|
|
case 201:
|
|
|
//获取文件地址上传成功时进行上传
|
|
|
- let uploadUrl = ((getUploadData.content || [])[0] || {}).uploadUrl;
|
|
|
+ let uploadUrl = ((getUploadData.content || [])[0] || {})
|
|
|
+ .uploadUrl;
|
|
|
if (!uploadUrl)
|
|
|
- return toolUtils.resultConstructor(logicConfig.resultObj.failure, null, '未获取到文件' + _currFileObj.fileName + '的上传地址');
|
|
|
+ return toolUtils.resultConstructor(
|
|
|
+ logicConfig.resultObj.failure,
|
|
|
+ null,
|
|
|
+ "未获取到文件" + _currFileObj.fileName + "的上传地址"
|
|
|
+ );
|
|
|
//开始上传
|
|
|
- await upload(uploadUrl, _currFileObj.file, function (progressObj) {
|
|
|
- if (typeof _paramobj.uploadProgressCall == 'function') {
|
|
|
- let uploadedFileSize = progressObj.loaded / progressObj.total * _currFileObj.file.size;
|
|
|
- _paramobj.uploadProgressCall({ uploadedTotal: uploadedFileSize, fileName: _currFileObj.fileName });
|
|
|
+ await upload(
|
|
|
+ uploadUrl,
|
|
|
+ _currFileObj.file,
|
|
|
+ function (progressObj) {
|
|
|
+ if (typeof _paramobj.uploadProgressCall == "function") {
|
|
|
+ let uploadedFileSize =
|
|
|
+ (progressObj.loaded / progressObj.total) *
|
|
|
+ _currFileObj.file.size;
|
|
|
+ _paramobj.uploadProgressCall({
|
|
|
+ uploadedTotal: uploadedFileSize,
|
|
|
+ fileName: _currFileObj.fileName,
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- });
|
|
|
+ );
|
|
|
case 200:
|
|
|
++uploadedCount;
|
|
|
- if (typeof _paramobj.oneUploadedCall == 'function') {
|
|
|
- _paramobj.oneUploadedCall({ fileName: _currFileObj.fileName, fileId: getUploadData.id });
|
|
|
+ if (typeof _paramobj.oneUploadedCall == "function") {
|
|
|
+ _paramobj.oneUploadedCall({
|
|
|
+ fileName: _currFileObj.fileName,
|
|
|
+ fileId: getUploadData.id,
|
|
|
+ });
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
- return toolUtils.resultConstructor(logicConfig.resultObj.failure, null, '获取文件' + _currFileObj.fileName + '的上传地址时出错:' + getUploadResult.message);
|
|
|
+ return toolUtils.resultConstructor(
|
|
|
+ logicConfig.resultObj.failure,
|
|
|
+ null,
|
|
|
+ "获取文件" +
|
|
|
+ _currFileObj.fileName +
|
|
|
+ "的上传地址时出错:" +
|
|
|
+ getUploadResult.message
|
|
|
+ );
|
|
|
}
|
|
|
if (uploadedCount == waitFiles.length)
|
|
|
- return toolUtils.resultConstructor(logicConfig.resultObj.success, null, null);
|
|
|
+ return toolUtils.resultConstructor(
|
|
|
+ logicConfig.resultObj.success,
|
|
|
+ null,
|
|
|
+ null
|
|
|
+ );
|
|
|
}
|
|
|
} catch (error) {
|
|
|
console.error(error);
|
|
|
- return toolUtils.resultConstructor(logicConfig.resultObj.failure, null, error.message);
|
|
|
+ return toolUtils.resultConstructor(
|
|
|
+ logicConfig.resultObj.failure,
|
|
|
+ null,
|
|
|
+ error.message
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
//获取文件内容的md5值
|
|
@@ -219,13 +271,13 @@ export class axiosUtils {
|
|
|
let spark = new SparkMD5.ArrayBuffer();
|
|
|
let fileReader = new FileReader();
|
|
|
fileReader.onload = function (e) {
|
|
|
- spark.append(e.target.result); // Append array buffer
|
|
|
+ spark.append(e.target.result); // Append array buffer
|
|
|
currentChunk++;
|
|
|
if (currentChunk < chunks) {
|
|
|
loadNext();
|
|
|
} else {
|
|
|
let fileContentMd5 = spark.end();
|
|
|
- console.info('computed hash', fileContentMd5); // Compute hash
|
|
|
+ console.info("computed hash", fileContentMd5); // Compute hash
|
|
|
//文件md5获取完成后,调用后台接口获取上传地址
|
|
|
// let getUploadResult = await getUploadUrl(fileContentMd5, _fileObj.fileName, file.size);
|
|
|
resolve(fileContentMd5);
|
|
@@ -233,56 +285,68 @@ export class axiosUtils {
|
|
|
};
|
|
|
|
|
|
fileReader.onerror = function (e) {
|
|
|
- let errStr = '文件:' + _fileObj.fileName + '读取错误:';
|
|
|
+ let errStr = "文件:" + _fileObj.fileName + "读取错误:";
|
|
|
console.error(e);
|
|
|
reject(errStr);
|
|
|
};
|
|
|
|
|
|
function loadNext() {
|
|
|
var start = currentChunk * chunkSize,
|
|
|
- end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
|
|
|
+ end =
|
|
|
+ start + chunkSize >= file.size ? file.size : start + chunkSize;
|
|
|
|
|
|
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
|
|
|
}
|
|
|
|
|
|
loadNext();
|
|
|
});
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
//获取文件上传地址
|
|
|
async function getUploadUrl(fileContentMd5: string, _fileObj: any) {
|
|
|
let fileName = _fileObj.fileName;
|
|
|
let fileSize = _fileObj.file.size;
|
|
|
let projectId = _fileObj.projectId || vueStore.state.selectProject.id;
|
|
|
- let groupCode = _fileObj.groupCode || vueStore.state.selectProject.groupCode;
|
|
|
+ let groupCode =
|
|
|
+ _fileObj.groupCode || vueStore.state.selectProject.groupCode;
|
|
|
//应用ID暂时用不上
|
|
|
- let appId = '';
|
|
|
+ let appId = "";
|
|
|
|
|
|
- let getUploadUrl = toolUtils.getBaseHttpUrl(fileServiceUrl, 'file/initSingleUpload') +
|
|
|
- '?userId=' + userId + '&projectId=' + projectId + '&groupCode=' + groupCode + '&appId=';
|
|
|
+ let getUploadUrl =
|
|
|
+ toolUtils.getBaseHttpUrl(fileServiceUrl, "file/initSingleUpload") +
|
|
|
+ "?userId=" +
|
|
|
+ userId +
|
|
|
+ "&projectId=" +
|
|
|
+ projectId +
|
|
|
+ "&groupCode=" +
|
|
|
+ groupCode +
|
|
|
+ "&appId=";
|
|
|
|
|
|
let paramObj = {
|
|
|
fileMd5: fileContentMd5,
|
|
|
fileName: fileName,
|
|
|
fileBucket: (window as any).__systemConf.baseRouteUrl,
|
|
|
- fileSize: fileSize
|
|
|
+ fileSize: fileSize,
|
|
|
};
|
|
|
- return await _this.customRequest(getUploadUrl, null, paramObj, 'post');
|
|
|
- };
|
|
|
+ return await _this.customRequest(getUploadUrl, null, paramObj, "post");
|
|
|
+ }
|
|
|
|
|
|
//上传
|
|
|
async function upload(uploadUrl, file, uploadProgressCall) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
var formData = new FormData();
|
|
|
- formData.append('file', file);
|
|
|
- axios.put(uploadUrl, formData, {
|
|
|
- onUploadProgress: uploadProgressCall
|
|
|
- }).then(function (res) {
|
|
|
- resolve(res);
|
|
|
- }).catch(function (error) {
|
|
|
- reject(error);
|
|
|
- });
|
|
|
+ formData.append("file", file);
|
|
|
+ axios
|
|
|
+ .put(uploadUrl, formData, {
|
|
|
+ onUploadProgress: uploadProgressCall,
|
|
|
+ })
|
|
|
+ .then(function (res) {
|
|
|
+ resolve(res);
|
|
|
+ })
|
|
|
+ .catch(function (error) {
|
|
|
+ reject(error);
|
|
|
+ });
|
|
|
});
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
}
|