Commit 2b3058b5 by Sxy

feat: 多文件打包上传

parent 4bd54b04
var co = require('co');
var OSS = require('ali-oss');
var jszip = require("jszip");
class OSSClient {
constructor() {
this.client = new OSS({
......@@ -19,6 +21,7 @@ class OSSClient {
});
return result;
}
async upfile(key, filepath) {
var me = this;
var result = await co(function* () {
......@@ -27,6 +30,7 @@ class OSSClient {
})
return result;
}
async putBuffer(key, buf) {
try {
var result = await this.client.put(key, buf);
......@@ -47,6 +51,65 @@ class OSSClient {
}
});
}
/**
*
* @param {*} fileArr [
{
url: '', //文件的oss存储路径 (必填)
name: '', // 文件名 (可选, 不需要填扩展名)
foldPath: '目录1/目录2/' //(可选, 文件在压缩包中的存储路径)
}]
* @param {*} zipName
*/
async batchDownloadAndZip(fileArr, zipName) {
var me = this;
return new Promise((resolve, reject) => {
const zip = new jszip();
let promises = [];
fileArr.forEach(item => {
let promise = me.getFile(item.url).then(data => {
// 获取文件类型
let typeArr = item.url.split(".");
let type = typeArr[typeArr.length - 1];
// 默认文件名·
let nameArr = item.url.split("/");
let name = item.name ? (item.name + '.' + type) : nameArr[nameArr.length - 1];
let foldPath = item.foldPath || "";
zip.file(foldPath + name, data, {
binary: true
});
})
promises.push(promise);
});
Promise.all(promises).then(() => {
zip.generateAsync({ type: "nodebuffer" }).then(async (content) => {
const url = await co(function* () {
const result = yield me.client.put((zipName || `${new Date().getTime()}`) + '.zip', content);
return result.url;
});
resolve(url);
}).catch(err => {
reject(err)
});;
});
})
}
/**
* 下载文件到内存
* @param {*} url
*/
async getFile(url) {
let me = this;
let str = 'aliyuncs.com//';
let key = url.substring(url.lastIndexOf(str) + str.length, url.length);
const content = await co(function* () {
var result = yield me.client.get(key);
return result.content;
});
return content;
}
}
module.exports = OSSClient;
// var oss=new OSSClient();
......
......@@ -4,6 +4,8 @@ const system = require("../system");
const centerChannelUrl = settings.centerChannelUrl();
const qifutongUrl = settings.qifutongUrl();
const { appKey, secret } = settings;
const OSS = system.getObject("util.ossClient");
axios.defaults.timeout = 3 * 1000; // 4s
......@@ -54,7 +56,7 @@ const getLoginByUserName = async (mobile) => {
*/
const submitMaterials = async (deliverData, materials) => {
let { delivery_info: { serviceName } } = deliverData;
let { proposerInfo: { principalInfo, businessLicense }, shareholderData, otherMaterialsInfo, implementationPlanInfo: { webApp } } = materials;
let { proposerInfo: { principalInfo, businessLicense }, shareholderData, otherMaterialsInfo, implementationPlanInfo: { webApp, serviceProjectEdi, serviceProjectIcp, specialApproval } } = materials;
let Domain = webApp[0].domain;
let CorporateName = businessLicense.name;
......@@ -104,8 +106,37 @@ const submitMaterials = async (deliverData, materials) => {
});
PartnerLaw = PartnerLaw && PartnerLaw.file.url;
// let PartnerPreviewOtherList = [];
// 打包上传 推送
let PartnerPreviewOtherList = [
...otherMaterialsInfo.map(item => {
return {
url: item.file.url, //文件的oss存储路径 (必填)
name: item.title, // 文件名 (可选, 不需要填扩展名)
foldPath: '材料清单/'//(可选, 文件在压缩包中的存储路径)
}
}),
...serviceProjectEdi.filter(item => {
return item.file && item.file.url || false
}).map(item => {
return {
url: item.file.url,
name: item.title,
foldPath: '拟开展服务项目/'
}
}),
...specialApproval.filter(item => {
return item.file && item.file.url || false
}).map(item => {
return {
url: item.file.url,
name: item.title,
foldPath: '专项审批项目/'
}
}),
];
let partnerPreviewOtherUrl = await OSS.batchDownloadAndZip(PartnerPreviewOtherList, `${deliverData.delivery_code}_${CorporateName}_供预览文件`);
PartnerPreviewOtherList = [partnerPreviewOtherUrl];
await pushQiFuTong(deliverData.salesman_phone, {
actionType: "serviceProviderSubmitMaterial",
actionBody: {
......@@ -117,9 +148,7 @@ const submitMaterials = async (deliverData, materials) => {
PartnerBusinessLicense, //必填
PartnerIdCardList, //相关人员证书必填
PartnerDomainCertificate, //必填
// "PartnerPreviewOtherList": [
// "合作方递交其他供预览的件,只能传递ZIP包"
// ],
PartnerPreviewOtherList, //合作方递交其他供预览的件,只能传递ZIP包
PartnerPlan,
PartnerForeignInvestment,
PartnerLaw,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -36,6 +36,7 @@
"glob": "^7.1.6",
"gm": "^1.23.1",
"jsonwebtoken": "^8.5.1",
"jszip": "^3.5.0",
"log4js": "^2.10.0",
"method-override": "^2.3.10",
"moment": "^2.26.0",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment