| 
					
				 | 
			
			
				@@ -20,6 +20,8 @@ const msal = require('@azure/msal-node'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const FormData = require("form-data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const {pool, sql} = require('./config/sql.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const { v4: uuidv4 } = require('uuid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const {init} = require('./ext.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let POSSIBLE_EXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const apiUrl = 'http://192.168.20.99:5050'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -27,9 +29,6 @@ const createErrors = require('http-errors'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const gateWayKey = process.env.GATE_WAY_KEY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const errorMap = new Map([ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const msalConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   auth: { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,6 +141,7 @@ serverApp.use(bodyParser.json()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.get("/tab",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // isAuthenticated,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    POSSIBLE_EXT = await init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     res.sendFile(globalPath.join(__dirname, "/views/hello.html"),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // { idTokenClaims: req.session.account.idTokenClaims } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,14 +261,26 @@ serverApp.get("/post-redirect", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post("/getGroupList",  async function (req, res, next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // throw new Error('Error'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      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 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 options = getOptions(req.session.accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const uriArr = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(endPoint + "/me/drive/root", options), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(endPoint + "/me/drive/SharePointIds", options), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(endPoint + "/me/joinedTeams", options), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(endPoint + "/sites/root", options), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        axios.get(endPoint + "/sites/root/SharePointIds", options), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const result = await Promise.all(uriArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const oneDrive = result[0].data;        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const sharePointIds = result[1].data;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const graphResponse = result[2].data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const sites = result[3].data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const sitesSharePoint = result[4].data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const teams = graphResponse.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       oneDrive.sharePoint = sharePointIds; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       sites.sharePoint = sitesSharePoint; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -650,7 +662,71 @@ serverApp.post('/api/check-name', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           res.json(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function uploadDrive(options, folder, siteId, path, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const startTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!Array.isArray(folder)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      folder = [folder]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const makeFolderTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', timeCheck(startTime, makeFolderTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/upload', upload.array('file'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // isAuthenticated, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -664,130 +740,133 @@ serverApp.post('/api/upload', upload.array('file'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // const folderResult = await makeFolder(options, folder, siteId, path, file_path, files, req.session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // console.log(folderResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // return res.json(folderResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (!Array.isArray(folder)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            folder = [folder]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // if (folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     if (!Array.isArray(folder)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       folder = [folder]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //           folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //       catch(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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      await uploadDrive(options, folder, siteId, path, res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          for (let item of folder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const fileInfo = JSON.parse(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              name: fileInfo.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              folder: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              '@microsoft.graph.conflictBehavior': 'rename' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let folderPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (fileInfo.path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              folderPath = fileInfo.path;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (!path.includes(':')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                folderPath = ":" + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let uri = endPoint + "/sites/"+ siteId + path + folderPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            catch(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) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const promiseArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const labelPromiseArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const fileWriteArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const possibleExt = POSSIBLE_EXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const {supported_file_ext, protected_file_ext} = possibleExt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let supportedArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (supported_file_ext && protected_file_ext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          supportedArr = supported_file_ext.split(';'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!supportedArr[supportedArr.length - 1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            supportedArr.splice(supportedArr.length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          console.log('폴더 시작 시간 :', startTime.toLocaleString(), ', 폴더 종료 시간 :', makeFolderTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const promiseArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (files && files.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           let beforeUri = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           let beforeItemId = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const possibleExt = await getPossibleExt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           for (let idx in files) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const file = files[idx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //const fileName = file.originalname; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //let filePath = req.body[ fileName + "_path"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             file.originalname = Buffer.from(file.originalname, 'ascii').toString('utf8'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let originName = file.originalname; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (originName && possibleExt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (originName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               const ext = globalPath.extname(originName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const {supported_file_ext, protected_file_ext} = possibleExt.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              if (supported_file_ext && protected_file_ext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let supportedArr = supported_file_ext.split(';'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!supportedArr[supportedArr.length - 1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  supportedArr.splice(supportedArr.length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!supportedArr.includes(ext)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return res.json({success:'F', message: '파일명 : ' + originName  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      +'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.<br>가능 확장자 :'  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      + JSON.stringify(supportedArr)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              if (supportedArr.length > 0 && !supportedArr.includes(ext)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  return res.json({success:'F', message: '파일명 : ' + originName  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    +'<br>해당 파일은 업로드 불가 파일입니다. 다시 시도해주세요.<br>가능 확장자 :'  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    + JSON.stringify(supportedArr)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const uuid = uuidv4(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const realFileName = uuid + ext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                fs.writeFileSync('Z:/Source/' + realFileName, file.buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                fileWriteArray.push(new Promise((resolve, reject) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  const data = fs.writeFileSync('Z:/Source/' + realFileName, file.buffer) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  resolve({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //fileWriteArray.push(['Z:/Source/' + realFileName, file.buffer]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //fs.writeFileSync('Z:/Source/' + realFileName, file.buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const base64Data = Buffer.from(file.buffer).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   email: req.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   dispFileName: originName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  realFileName : realFileName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   aipGuid: "878173ae-cc36-4881-af57-604af868314c", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  comment: "set-label", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  fileData: base64Data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  const result = await axios.post(apiUrl + '/api/v1/file/set-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  if (result.data.statusCode !== 200 && result.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    console.log(result.data.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return res.json({success:'F', message: '파일 레이블 작업 중 오류가 발생했습니다.<br>에러 : ' + result.data.result.errorMessage}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  return res.json({success:'F', message: '파일 레이블 작업 중 오류가 발생했습니다.<br>에러 : ' + JSON.stringify(error.message)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const labelFile = fs.readFileSync('Z:/Source/' + realFileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // console.log(realFileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // console.log(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // labelPromiseArray.push(axios.post(apiUrl + '/api/v1/file/set-label', param)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                labelPromiseArray.push(axios.post(apiUrl + '/api/v1/stream/set-label', param)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let formatPath = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -800,7 +879,7 @@ serverApp.post('/api/upload', upload.array('file'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let itemId = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 const uri = endPoint + "/sites/"+ siteId + path + formatPath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (beforeUri === uri) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (beforeUri === uri) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   itemId = beforeItemId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -815,97 +894,187 @@ serverApp.post('/api/upload', upload.array('file'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     res.json({success:'F', message: '파일 업로드 작업 중 오류가 발생했습니다.<br>에러 : ' + JSON.stringify(error.message)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+originName+':/content', labelFile, options)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // console.log(labelFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // const labelData = await setLabelFiles(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // const fileData = Buffer.from(file.buffer).toString('base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // const param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   apiKey: gateWayKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   email: req.session.account.idTokenClaims.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   dispFileName: originName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   aipGuid: "878173ae-cc36-4881-af57-604af868314c", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   comment: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   fileData: fileData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   const result = await axios.post(apiUrl + '/api/v1/stream/set-label', param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   if (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //     if (result.data.statusCode === 200 && !result.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //       let bufferValue = Buffer.from(result.data.result.fileData, "base64"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //       file = bufferValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //     else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //       console.log(result.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //       return res.json({success:'F', message: '파일명 : ' + originName + '<br>에러 : ' + result.data.result.errorMessage}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //   console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                promiseArray.push(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+originName+':/content'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // console.log(labelData.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // return res.json({message:'test'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              let fileWriteTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const writeArr = await Promise.all(fileWriteArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              let writeTime = timeCheck(fileWriteTime, new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log('파일 Write Time : '+ writeTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //   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 labelTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const labelResult = await Promise.all(labelPromiseArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // console.log(labelResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log('label time : ', timeCheck(labelTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              labelResult.forEach((obj, idx)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (obj.data && !obj.data.result.errorCode && obj.data.result.fileData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  const data = Buffer.from(obj.data.result.fileData, 'base64'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  promiseArray[idx] = axios.put(promiseArray[idx], data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // const readArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // labelResult.forEach((obj)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //   readArray.push(new Promise((resolve, reject)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //       if (obj.data && !obj.data.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //         fs.readFile('Z:/Target/' + obj.data.result.outputFileName, (err, data)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //           if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //             reject({err});  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //           resolve({data}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //           //promiseArray[idx] = axios.put(promiseArray[idx], data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //       else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //         reject(obj.data.result.errorMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //   })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // console.log('labelResult : ', labelResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // let readTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // const readResult = await Promise.all(readArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // console.log(readResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // console.log('File Read time : ', timeCheck(readTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              let uploadTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // promiseArray.forEach((obj, idx)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //   // console.log(readResult[idx].data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //   // console.log(obj[idx]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              //   promiseArray[idx] = axios.put(obj, readResult[idx].data, options);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const uploadResult = await Promise.all(promiseArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log('File uploadTime : ', timeCheck(uploadTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // promiseArray.push(axios.put(endPoint + "/sites/"+ siteId +"/drive/items/"+itemId+':/'+originName+':/content', file, options)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          let betweenTime = timeCheck(startTime, endTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          res.json({success:'S', message: '요청하신 파일 업로드가 정상적으로 처리 되었습니다.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const endTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // let fileReadTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const result = await Promise.all(labelPromiseArray).then((result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   const array = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   for (let item of result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     const obj = item.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     if (obj.success && !obj.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       // console.log(obj.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       const labelFile = fs.readFileSync('Z:/Target/' + obj.result.outputFileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       array.push({success:'S', dispFileName: obj.result.dispFileName, outputFileName : obj.result.outputFileName, file: labelFile}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       array.push({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + obj.result.errorMessage}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   return array; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const array = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const result = await Promise.all(labelPromiseArray).then(async (result)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   return await Promise.all(result.map((item, idx)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     const obj = item.data;   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     if (obj.success && !obj.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       fs.readFile('Z:/Target/' + obj.result.outputFileName, (err, data)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //           throw err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         promiseArray[idx] = axios.put(promiseArray[idx], data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       throw obj.result.errorMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   })).then(async()=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     return await Promise.all(promiseArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const result = await Promise.all(promiseArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log('파일 Read 소요시간 : '+timeCheck(fileReadTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const array = await Promise.all(result.map((item, idx)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   const obj = item.data;   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   if (obj.success && !obj.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     fs.readFile('Z:/Target/' + obj.result.outputFileName, (err, data)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         throw err; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       promiseArray[idx] = axios.put(promiseArray[idx], data, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       return {success:'S', dispFileName: obj.result.dispFileName, outputFileName : obj.result.outputFileName, file: data}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     return {success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + obj.result.errorMessage}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const errorIdx = array.findIndex((obj)=> obj.success === 'F'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // if (errorIdx >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   return res.json(array[errorIdx]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // for (let ii = 0; ii < result.length; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   const obj = result[ii].data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   if (obj.success && !obj.result.errorCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     // console.log(obj.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     const labelFile = fs.readFileSync('Z:/Target/' + obj.result.outputFileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     array.push({success:'S', dispFileName: obj.result.dispFileName, outputFileName : obj.result.outputFileName, file: labelFile}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     array.push({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + obj.result.errorMessage}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log(array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log('파일 Read 소요시간 : '+timeCheck(fileReadTime, new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // return res.json({success: 'F', message: 'test'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // if (result && result.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     for (let ii=0; ii < result.length; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       if (result[ii] && result[ii].success === 'S') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         promiseArray[ii] = axios.put(promiseArray[ii], result[ii].file, options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //         return res.json(result[ii]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // .catch((error)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   console.log('=========================에러=================') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //   console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // return res.json({success:'F', message: '요청하신 파일 업로드 중 오류가 발생하였습니다.<br>' + getErrorMessage(error)}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // let uploadTime = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const uploadResult = await Promise.all(promiseArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // const uploadBetween = timeCheck(uploadTime, new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // console.log('upload 소요 시간:'+uploadBetween); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        console.log('시작 시간 :', startTime.toLocaleString(), ', 종료 시간 :', endTime.toLocaleString(), ', 소요 시간 :', betweenTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        res.json({success:'S', message: '요청하신 파일 업로드가 정상적으로 처리 되었습니다.'}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function timeCheck(startTime, endTime) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let betweenTime = endTime - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (betweenTime > 60000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    betweenTime = (betweenTime/1000/60) + ' 분'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    betweenTime = (betweenTime/1000) + ' 초';        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return betweenTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/download', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // isAuthenticated, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1226,17 +1395,7 @@ async function getFolderItems(url, array, options, session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/getPossibleExtList', async (req, res, next)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (req.body) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const result = await getPossibleExt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return res.json(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    catch(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      res.status(error.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      res.send(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return res.json(POSSIBLE_EXT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 serverApp.post('/api/delete',  
			 |