|
@@ -13,7 +13,8 @@ const JSZIP = require('jszip');
|
|
|
require('dotenv').config({ path: './env/.env.test' });
|
|
|
const session = require('express-session');
|
|
|
const multer = require('multer');
|
|
|
-const XLSX = require('xlsx');
|
|
|
+const XLSX = require('xlsx');
|
|
|
+const pptxgen = require('pptxgenjs');
|
|
|
|
|
|
const {Document, Packer, Paragraph, TextRun} = require('docx');
|
|
|
let WebSocketServer = require('websocket').server;
|
|
@@ -231,9 +232,9 @@ serverApp.post("/api-post", authProvider.acquireToken({
|
|
|
}));
|
|
|
|
|
|
serverApp.post("/getGroupList", authProvider.acquireToken({
|
|
|
- scopes: ['.default'],
|
|
|
- redirectUri: redirectUri,
|
|
|
- successRedirect: '/group-redirect'
|
|
|
+ scopes: ['.default'],
|
|
|
+ redirectUri: redirectUri,
|
|
|
+ successRedirect: '/group-redirect'
|
|
|
}));
|
|
|
|
|
|
|
|
@@ -244,10 +245,12 @@ serverApp.get("/group-redirect",
|
|
|
try {
|
|
|
const oneDrive = await getFetch(endPoint + "/me/drive/root", req.session.accessToken);
|
|
|
const sharePointIds = await getFetch(endPoint + "/me/drive/SharePointIds", req.session.accessToken);
|
|
|
+ // const publicTeam = await getFetch(endPoint + "/groups?$filter=groupTypes/any(c:c+eq+'Unified')", req.session.accessToken);
|
|
|
const graphResponse = await getFetch(endPoint + "/me/joinedTeams", req.session.accessToken);
|
|
|
const sites = await getFetch(endPoint + "/sites/root", req.session.accessToken);
|
|
|
const sitesSharePoint = await getFetch(endPoint + "/sites/root/SharePointIds", req.session.accessToken);
|
|
|
|
|
|
+ // const public = publicTeam.value;
|
|
|
const teams = graphResponse.value;
|
|
|
oneDrive.sharePoint = sharePointIds;
|
|
|
sites.sharePoint = sitesSharePoint;
|
|
@@ -257,6 +260,7 @@ serverApp.get("/group-redirect",
|
|
|
},
|
|
|
joinedTeams : {
|
|
|
teams : teams,
|
|
|
+ // teams : public,
|
|
|
items : {},
|
|
|
},
|
|
|
sites : {
|
|
@@ -265,15 +269,17 @@ serverApp.get("/group-redirect",
|
|
|
}
|
|
|
|
|
|
if (teams && teams.length) {
|
|
|
- const options = {
|
|
|
- responseType: 'arraybuffer',
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- ConsistencyLevel: 'eventual',
|
|
|
- withCredentials:true,
|
|
|
- },
|
|
|
- };
|
|
|
+ // if (public && public.length) {
|
|
|
+ // const options = {
|
|
|
+ // responseType: 'arraybuffer',
|
|
|
+ // headers: {
|
|
|
+ // Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
+ // ConsistencyLevel: 'eventual',
|
|
|
+ // withCredentials:true,
|
|
|
+ // },
|
|
|
+ // };
|
|
|
for (let team of teams) {
|
|
|
+ // for (let team of public) {
|
|
|
const item = await getFetch(endPoint + "/groups/"+team.id+"/drive/items/root/children", req.session.accessToken);
|
|
|
const sharePoint = await getFetch(endPoint + "/groups/"+team.id+"/drive/SharePointIds", req.session.accessToken);
|
|
|
// const image = await axios.get(endPoint + "/groups/" + team.id + "/photo/$value", options);
|
|
@@ -316,34 +322,65 @@ serverApp.post('/api/makeFolder',
|
|
|
Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
},
|
|
|
};
|
|
|
- const {siteId, path, param} = req.body;
|
|
|
+ const {siteId, path, name} = req.body;
|
|
|
+ const resultObj = {message:"", success: 'F'};
|
|
|
+ const param ={
|
|
|
+ name: name,
|
|
|
+ folder: { },
|
|
|
+ '@microsoft.graph.conflictBehavior': 'rename'
|
|
|
+ }
|
|
|
try{
|
|
|
const sitesInfo = await axios.get(endPoint + "/sites/"+ siteId + path, options);
|
|
|
- if (sitesInfo.data) {
|
|
|
+ if (sitesInfo.data && sitesInfo.data.id) {
|
|
|
const itemId = sitesInfo.data.id;
|
|
|
- const result = await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children", JSON.parse(param), options);
|
|
|
- res.json(result.data)
|
|
|
+ const result = await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children",param, options);
|
|
|
+
|
|
|
+ if (result.data) {
|
|
|
+ resultObj.message = "폴더가 생성되었습니다.<br>폴더명 : "+ name;
|
|
|
+ resultObj.success = 'S';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.message = "폴더가 생성되지 않았습니다.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.message = "생성할 폴더 경로를 찾을 수 없습니다.";
|
|
|
}
|
|
|
}
|
|
|
catch(error) {
|
|
|
- console.log(error.response.data.error);
|
|
|
-
|
|
|
- // resultObj.success = 'F';
|
|
|
- // resultObj.message = '선택하신 파일 정보 삭제중 오류가 발생하였습니다.\n' + error.response.data.error.message;
|
|
|
- // return res.json(resultObj);
|
|
|
+ resultObj.message = "폴더 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error);
|
|
|
}
|
|
|
-})
|
|
|
+
|
|
|
+ res.json(resultObj);
|
|
|
+});
|
|
|
+
|
|
|
+function getErrorMessage(error) {
|
|
|
+ let errorText = "";
|
|
|
+ if (error.response && error.response.status && error.response.statusText && error.response.data && error.response.data.error) {
|
|
|
+ // console.log(error.response);
|
|
|
+ console.log('=============================== Axios Error ===============================')
|
|
|
+ console.log(error.response);
|
|
|
+ console.log(error.response.data.error);
|
|
|
+ errorText = `status : ${error.response.status} - ${error.response.statusText}<br>message : ${error.response.data.error.message}`;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ console.log('================================ Error =====================================')
|
|
|
+ console.log(error);
|
|
|
+ errorText = error;
|
|
|
+ }
|
|
|
+ return errorText;
|
|
|
+}
|
|
|
|
|
|
serverApp.post('/api/makeWord',
|
|
|
isAuthenticated,
|
|
|
isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
-
|
|
|
- const fileOptions = { headers: {
|
|
|
- Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- "Content-Type" : file.mimeType
|
|
|
- }}
|
|
|
- const {siteId, itemId, name} = req.body;
|
|
|
+ const options = {
|
|
|
+ headers: {
|
|
|
+ Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
+ },
|
|
|
+ };
|
|
|
+ const {siteId, path, name} = req.body;
|
|
|
const doc = new Document({
|
|
|
sections : [
|
|
|
{
|
|
@@ -356,17 +393,32 @@ serverApp.post('/api/makeWord',
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
- })
|
|
|
- try{
|
|
|
- await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+name+':/content', file.buffer, fileOptions);
|
|
|
- }
|
|
|
- catch(error) {
|
|
|
- console.log(error.response.data.error);
|
|
|
- next(error);
|
|
|
- // resultObj.success = 'F';
|
|
|
- // resultObj.message = '선택하신 파일 정보 삭제중 오류가 발생하였습니다.\n' + error.response.data.error.message;
|
|
|
- // return res.json(resultObj);
|
|
|
- }
|
|
|
+ });
|
|
|
+
|
|
|
+ Packer.toBuffer(doc).then(async (buffer)=>{
|
|
|
+ const resultObj = {message:"", success: 'F'};;
|
|
|
+ try{
|
|
|
+ const sitesInfo = await axios.get(endPoint + "/sites/"+ siteId + path, options);
|
|
|
+ if (sitesInfo.data && sitesInfo.data.id) {
|
|
|
+ const itemId = sitesInfo.data.id;
|
|
|
+ const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+name+':/content', buffer, options);
|
|
|
+ if (result.data) {
|
|
|
+ resultObj.message = "요청하신 Word 파일이 생성되었습니다.<br>파일명 : "+ name;
|
|
|
+ resultObj.success = 'S';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.message = "요청하신 Word 파일이 생성되지 않았습니다.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultObj.message = "생성할 폴더 경로를 찾을 수 없습니다.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(error) {
|
|
|
+ resultObj.message = "요청하신 Word 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error);
|
|
|
+ }
|
|
|
+ res.send(resultObj);
|
|
|
+ });
|
|
|
})
|
|
|
|
|
|
serverApp.post('/api/makeExcel',
|
|
@@ -376,7 +428,6 @@ serverApp.post('/api/makeExcel',
|
|
|
|
|
|
const fileOptions = { headers: {
|
|
|
Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
- "Content-Type" : 'application/ms-excel'
|
|
|
}}
|
|
|
|
|
|
const options = { headers: {
|
|
@@ -385,27 +436,58 @@ serverApp.post('/api/makeExcel',
|
|
|
const {siteId, path, name} = req.body;
|
|
|
const wb = XLSX.utils.book_new();
|
|
|
XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet([]), 'Sheet1');
|
|
|
- XLSX.writeFile(wb, name);
|
|
|
- const data = fs.readFileSync(name);
|
|
|
+ var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'buffer'});
|
|
|
+ const resultObj = {message:'', success: 'F'};
|
|
|
try{
|
|
|
const parentData = await axios.get(endPoint + "/sites/"+ siteId +path, options);
|
|
|
if (parentData.data) {
|
|
|
- const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', data, fileOptions);
|
|
|
- fs.unlinkSync(name);
|
|
|
+ const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', wbout, options);
|
|
|
if (result.data) {
|
|
|
- return res.json({message:'요청하신 Excel 파일이 생성 되었습니다.', success: 'S'});
|
|
|
+ resultObj.message ='요청하신 Excel 파일이 생성 되었습니다.';
|
|
|
+ resultObj.success = 'S';
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ resultObj.message = '요청하신 Excel 파일이 생성 되지 않았습니다.';
|
|
|
}
|
|
|
- return res.json({message:'요청하신 Excel 파일이 생성 되지 않았습니다.', success: 'F'});
|
|
|
}
|
|
|
}
|
|
|
catch(error) {
|
|
|
- console.log(error.response.data.error);
|
|
|
- return res.json({message:'요청하신 Excel 파일 생성 중 오류가 발생하였습니다.', success: 'F', error: error});
|
|
|
- // next(error);
|
|
|
- // resultObj.success = 'F';
|
|
|
- // resultObj.message = '선택하신 파일 정보 삭제중 오류가 발생하였습니다.\n' + error.response.data.error.message;
|
|
|
- // return res.json(resultObj);
|
|
|
+ resultObj.message = "요청하신 Word 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error);
|
|
|
}
|
|
|
+ res.json(resultObj);
|
|
|
+})
|
|
|
+
|
|
|
+serverApp.post('/api/makePptx',
|
|
|
+ isAuthenticated,
|
|
|
+ isAccessTokens,
|
|
|
+ async (req, res, next)=>{
|
|
|
+
|
|
|
+ const options = { headers: {
|
|
|
+ Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
+ }}
|
|
|
+ const {siteId, path, name} = req.body;
|
|
|
+ const pres = new pptxgen();
|
|
|
+ pres.addSlide("TITLE_SLIDE");
|
|
|
+ const resultObj = {message:'', success: 'F'};
|
|
|
+ pres.stream().then(async (data)=>{
|
|
|
+ try{
|
|
|
+ const parentData = await axios.get(endPoint + "/sites/"+ siteId +path, options);
|
|
|
+ if (parentData.data) {
|
|
|
+ const result = await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+parentData.data.id+':/'+name+':/content', data, options);
|
|
|
+ if (result.data) {
|
|
|
+ resultObj.message ='요청하신 PowerPoint 프레젠테이션 파일이 생성 되었습니다.';
|
|
|
+ resultObj.success = 'S';
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ resultObj.message = '요청하신 PowerPoint 프레젠테이션 파일이 생성 되지 않았습니다.';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(error) {
|
|
|
+ resultObj.message = "요청하신 PowerPoint 프레젠테이션 파일 생성 중 오류가 발생하였습니다.<br>" + getErrorMessage(error);
|
|
|
+ }
|
|
|
+ res.json(resultObj);
|
|
|
+ })
|
|
|
})
|
|
|
|
|
|
serverApp.post('/api/check-name',
|
|
@@ -460,19 +542,141 @@ serverApp.post('/api/check-name',
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+// serverApp.post('/api/upload', upload.array('file'),
|
|
|
+// isAuthenticated,
|
|
|
+// isAccessTokens,
|
|
|
+// async (req, res, next)=>{
|
|
|
+// const startTime = new Date();
|
|
|
+// const folderParam = {
|
|
|
+// name: '',
|
|
|
+// folder: { },
|
|
|
+// '@microsoft.graph.conflictBehavior': 'rename'
|
|
|
+// }
|
|
|
+// const files = req.files;
|
|
|
+// let {siteId, path, folder} = req.body;
|
|
|
+
|
|
|
+// if (siteId && path) {
|
|
|
+// const options = {
|
|
|
+// headers: {
|
|
|
+// Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
+// },
|
|
|
+// };
|
|
|
+
|
|
|
+// if (folder) {
|
|
|
+// if (!Array.isArray(folder)) {
|
|
|
+// folder = [folder];
|
|
|
+// }
|
|
|
+// let beforeUri = '';
|
|
|
+// let beforeItemId = '';
|
|
|
+// for (let item of folder) {
|
|
|
+// const fileInfo = JSON.parse(item);
|
|
|
+// const param = {...folderParam};
|
|
|
+// param.name = fileInfo.name;
|
|
|
+// let folderPath = '';
|
|
|
+// if (fileInfo.path) {
|
|
|
+// folderPath = fileInfo.path;
|
|
|
+// if (!path.includes(':')) {
|
|
|
+// folderPath = ":" + folderPath;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// let uri = endPoint + "/sites/"+ siteId + path + folderPath;
|
|
|
+// try {
|
|
|
+
|
|
|
+// let itemId = '';
|
|
|
+// if (beforeUri === uri) {
|
|
|
+// itemId = beforeItemId;
|
|
|
+// }
|
|
|
+// else {
|
|
|
+// const sitesInfo = await axios.get(uri, options);
|
|
|
+// itemId = sitesInfo.data.id;
|
|
|
+// beforeItemId = itemId;
|
|
|
+// beforeUri = uri;
|
|
|
+// }
|
|
|
+// await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children", param, options);
|
|
|
+// }
|
|
|
+// catch(error) {
|
|
|
+// return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)});
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// if (files && files.length > 0) {
|
|
|
+// const promiseArray = [];
|
|
|
+// let beforeUri = '';
|
|
|
+// let beforeItemId = '';
|
|
|
+// for (let file of files) {
|
|
|
+// // const fileName = file.originalname.substring(0, file.originalname.lastIndexOf('.'));
|
|
|
+// const fileName = file.originalname;
|
|
|
+// let filePath = req.body[ fileName + "_path"];
|
|
|
+// file.originalname = Buffer.from(file.originalname, 'ascii').toString('utf8');
|
|
|
+
|
|
|
+// let formatPath = '';
|
|
|
+// if (filePath) {
|
|
|
+// if (Array.isArray(filePath) && filePath.length > 0) {
|
|
|
+// formatPath = filePath[0];
|
|
|
+// if (filePath.length > 1) {
|
|
|
+// req.body[ fileName + "_path"] = filePath.splice(1);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// else if (filePath.trim()){
|
|
|
+// formatPath = filePath;
|
|
|
+// }
|
|
|
+
|
|
|
+// if (!path.includes(":")) {
|
|
|
+// formatPath = ":" + formatPath;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// let itemId = '';
|
|
|
+// const uri = endPoint + "/sites/"+ siteId + path + formatPath;
|
|
|
+
|
|
|
+// if (beforeUri === uri) {
|
|
|
+// itemId = beforeItemId;
|
|
|
+// }
|
|
|
+// else {
|
|
|
+// const sitesInfo = await axios.get(uri, options);
|
|
|
+// itemId = sitesInfo.data.id;
|
|
|
+// beforeUri = uri;
|
|
|
+// beforeItemId = itemId;
|
|
|
+// }
|
|
|
+// const fileOptions = { headers: {
|
|
|
+// Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
+// "Content-Type" : file.mimeType
|
|
|
+// }}
|
|
|
+// // await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions);
|
|
|
+// promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions));
|
|
|
+// }
|
|
|
+
|
|
|
+// if (promiseArray.length > 0) {
|
|
|
+// try {
|
|
|
+// const result = await Promise.all(promiseArray);
|
|
|
+// console.log(result.length);
|
|
|
+
|
|
|
+// }
|
|
|
+// catch(error){
|
|
|
+// return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)});
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// const endTime = new Date();
|
|
|
+// let betweenTime = endTime - startTime;
|
|
|
+// if (betweenTime > 60000) {
|
|
|
+// betweenTime = (betweenTime/1000/60) + ' 분';
|
|
|
+// }
|
|
|
+// else {
|
|
|
+// betweenTime = (betweenTime/1000) + ' 초';
|
|
|
+// }
|
|
|
+// console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime);
|
|
|
+// res.json({success:'S', message: '요청하신 파일 업로드가 정상적으로 처리 되었습니다.'});
|
|
|
+// }
|
|
|
+// });
|
|
|
+
|
|
|
serverApp.post('/api/upload', upload.array('file'),
|
|
|
isAuthenticated,
|
|
|
isAccessTokens,
|
|
|
async (req, res, next)=>{
|
|
|
const startTime = new Date();
|
|
|
- const folderParam = {
|
|
|
- name: '',
|
|
|
- folder: { },
|
|
|
- '@microsoft.graph.conflictBehavior': 'rename'
|
|
|
- }
|
|
|
const files = req.files;
|
|
|
let {siteId, path, folder} = req.body;
|
|
|
-
|
|
|
if (siteId && path) {
|
|
|
const options = {
|
|
|
headers: {
|
|
@@ -488,8 +692,13 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
let beforeItemId = '';
|
|
|
for (let item of folder) {
|
|
|
const fileInfo = JSON.parse(item);
|
|
|
- const param = {...folderParam};
|
|
|
- param.name = fileInfo.name;
|
|
|
+
|
|
|
+ const param = {
|
|
|
+ name: fileInfo.name,
|
|
|
+ folder: {},
|
|
|
+ '@microsoft.graph.conflictBehavior': 'rename'
|
|
|
+ };
|
|
|
+
|
|
|
let folderPath = '';
|
|
|
if (fileInfo.path) {
|
|
|
folderPath = fileInfo.path;
|
|
@@ -500,55 +709,88 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
let uri = endPoint + "/sites/"+ siteId + path + folderPath;
|
|
|
try {
|
|
|
|
|
|
- let itemId = '';
|
|
|
- if (beforeUri === uri) {
|
|
|
- itemId = beforeItemId;
|
|
|
- }
|
|
|
- else {
|
|
|
- const sitesInfo = await axios.get(uri, options);
|
|
|
- itemId = sitesInfo.data.id;
|
|
|
- beforeItemId = itemId;
|
|
|
- beforeUri = uri;
|
|
|
- }
|
|
|
- await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children", param, options);
|
|
|
-
|
|
|
- // await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + itemId +"/children", param, options);
|
|
|
+ // let itemId = '';
|
|
|
+ // if (beforeUri === uri) {
|
|
|
+ // itemId = beforeItemId;
|
|
|
+ // }
|
|
|
+ // else {
|
|
|
+ // const sitesInfo = await axios.get(uri, options);
|
|
|
+ // itemId = sitesInfo.data.id;
|
|
|
+ // beforeItemId = itemId;
|
|
|
+ // beforeUri = uri;
|
|
|
+ // }
|
|
|
+ const result = await new Promise (async (resolve, reject)=>{
|
|
|
+ try {
|
|
|
+ const sitesInfo = await axios.get(uri, options);
|
|
|
+ resolve(sitesInfo.data);
|
|
|
+ }
|
|
|
+ catch(error) {
|
|
|
+ if (error.response) {
|
|
|
+ reject(error.response);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ reject(error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).then(async (result)=>{
|
|
|
+ return await new Promise(async (resolve, reject)=>{
|
|
|
+ try {
|
|
|
+ const uploadFolder = await axios.post(endPoint + "/sites/"+ siteId +"/drive/items/" + result.id +"/children", param, options);
|
|
|
+ resolve(uploadFolder.data);
|
|
|
+ }
|
|
|
+ catch(error){
|
|
|
+ if (error.response) {
|
|
|
+ reject(error.response);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ reject(error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }).catch((error)=>{
|
|
|
+ console.log(error);
|
|
|
+ })
|
|
|
+ console.log(result.createdDateTime);
|
|
|
+ // console.log(result);
|
|
|
}
|
|
|
catch(error) {
|
|
|
- if (error.response) {
|
|
|
- console.log(error.response.data);
|
|
|
- }
|
|
|
- else {
|
|
|
- console.log(error);
|
|
|
- }
|
|
|
- // next(error);
|
|
|
- return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.', error : error});
|
|
|
+ return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)});
|
|
|
}
|
|
|
}
|
|
|
+ const makeFolderTime = new Date();
|
|
|
+
|
|
|
+ let betweenTime = makeFolderTime - startTime;
|
|
|
+ if (betweenTime > 60000) {
|
|
|
+ betweenTime = (betweenTime/1000/60) + ' 분';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ betweenTime = (betweenTime/1000) + ' 초';
|
|
|
+ }
|
|
|
+ console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', betweenTime);
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+ const promiseArray = [];
|
|
|
if (files && files.length > 0) {
|
|
|
- const promiseArray = [];
|
|
|
let beforeUri = '';
|
|
|
let beforeItemId = '';
|
|
|
for (let file of files) {
|
|
|
- // const fileName = file.originalname.substring(0, file.originalname.lastIndexOf('.'));
|
|
|
const fileName = file.originalname;
|
|
|
let filePath = req.body[ fileName + "_path"];
|
|
|
file.originalname = Buffer.from(file.originalname, 'ascii').toString('utf8');
|
|
|
|
|
|
- try {
|
|
|
- let formatPath = '';
|
|
|
- if (filePath) {
|
|
|
- if (Array.isArray(filePath) && filePath.length > 0) {
|
|
|
- formatPath = filePath[0];
|
|
|
- if (filePath.length > 1) {
|
|
|
- req.body[ fileName + "_path"] = filePath.splice(1);
|
|
|
- }
|
|
|
+ let formatPath = '';
|
|
|
+ if (filePath) {
|
|
|
+ if (Array.isArray(filePath) && filePath.length > 0) {
|
|
|
+ formatPath = filePath[0];
|
|
|
+ if (filePath.length > 1) {
|
|
|
+ req.body[ fileName + "_path"] = filePath.splice(1);
|
|
|
}
|
|
|
- else if (filePath.trim()){
|
|
|
- formatPath = filePath;
|
|
|
+ }
|
|
|
+ else if (filePath.trim()){
|
|
|
+ formatPath = filePath;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (!path.includes(":")) {
|
|
|
formatPath = ":" + formatPath;
|
|
|
}
|
|
@@ -565,28 +807,31 @@ serverApp.post('/api/upload', upload.array('file'),
|
|
|
beforeUri = uri;
|
|
|
beforeItemId = itemId;
|
|
|
}
|
|
|
- // const uploadUri = endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content';
|
|
|
const fileOptions = { headers: {
|
|
|
Authorization: `Bearer ${req.session.accessToken}`,
|
|
|
"Content-Type" : file.mimeType
|
|
|
}}
|
|
|
- await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions);
|
|
|
- }
|
|
|
- catch(error) {
|
|
|
- if (error) {
|
|
|
- if (error.response) {
|
|
|
- console.log(error.response.data);
|
|
|
- }
|
|
|
- else {
|
|
|
- console.log(error);
|
|
|
- }
|
|
|
- }
|
|
|
- return res.json({success:'F', message: '요청하신파일 업로드 중 오류가 발생하였습니다.', error : error});
|
|
|
- }
|
|
|
+ // await axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions);
|
|
|
+ promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+file.originalname+':/content', file.buffer, fileOptions));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (promiseArray.length > 0) {
|
|
|
+ try {
|
|
|
+ const result = await Promise.all(promiseArray);
|
|
|
+ }
|
|
|
+ catch(error){
|
|
|
+ return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)});
|
|
|
}
|
|
|
}
|
|
|
const endTime = new Date();
|
|
|
- console.log('시작 시간 :', startTime, '종료 시간 :', endTime);
|
|
|
+ let betweenTime = endTime - startTime;
|
|
|
+ if (betweenTime > 60000) {
|
|
|
+ betweenTime = (betweenTime/1000/60) + ' 분';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ betweenTime = (betweenTime/1000) + ' 초';
|
|
|
+ }
|
|
|
+ console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime);
|
|
|
res.json({success:'S', message: '요청하신 파일 업로드가 정상적으로 처리 되었습니다.'});
|
|
|
}
|
|
|
});
|