|  |  | @ -5,88 +5,91 @@ const path = require('path') | 
			
		
	
		
			
				
					|  |  |  | const fs = require('fs'); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | const ext = { | 
			
		
	
		
			
				
					|  |  |  |     project: [".txt", ".dwg", ".doc", ".docx", ".xls", ".xlsx", ".pdf", ".png", ".jpg", ".svg"], | 
			
		
	
		
			
				
					|  |  |  |     report: [".doc", ".docx", ".xls", ".xlsx", ".pdf"], | 
			
		
	
		
			
				
					|  |  |  |     data: [".txt", ".xls", ".xlsx"], | 
			
		
	
		
			
				
					|  |  |  |     image: [".png", ".jpg", ".svg"], | 
			
		
	
		
			
				
					|  |  |  |     three: [".js"], | 
			
		
	
		
			
				
					|  |  |  |     video: [".mp4"], | 
			
		
	
		
			
				
					|  |  |  |     bpmn: [".bpmn", ".bpmn20.xml", ".zip", ".bar"], | 
			
		
	
		
			
				
					|  |  |  |     app: [".apk"] | 
			
		
	
		
			
				
					|  |  |  |    project: [".txt", ".dwg", ".doc", ".docx", ".xls", ".xlsx", ".pdf", ".png", ".jpg", ".svg"], | 
			
		
	
		
			
				
					|  |  |  |    report: [".doc", ".docx", ".xls", ".xlsx", ".pdf"], | 
			
		
	
		
			
				
					|  |  |  |    data: [".txt", ".xls", ".xlsx"], | 
			
		
	
		
			
				
					|  |  |  |    image: [".png", ".jpg", ".svg"], | 
			
		
	
		
			
				
					|  |  |  |    three: [".js"], | 
			
		
	
		
			
				
					|  |  |  |    video: [".mp4"], | 
			
		
	
		
			
				
					|  |  |  |    bpmn: [".bpmn", ".bpmn20.xml", ".zip", ".bar"], | 
			
		
	
		
			
				
					|  |  |  |    app: [".apk"] | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | module.exports = { | 
			
		
	
		
			
				
					|  |  |  |     entry: function (app, router, opts) { | 
			
		
	
		
			
				
					|  |  |  |    entry: function (app, router, opts) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         const getApiRoot = async function (ctx) { | 
			
		
	
		
			
				
					|  |  |  |             const { apiUrl } = opts; | 
			
		
	
		
			
				
					|  |  |  |       const getApiRoot = async function (ctx) { | 
			
		
	
		
			
				
					|  |  |  |          const { apiUrl, iotAuthWeb } = opts; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |             ctx.body = { root: apiUrl }; | 
			
		
	
		
			
				
					|  |  |  |         }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         let upload = async function (ctx, next) { | 
			
		
	
		
			
				
					|  |  |  |             try { | 
			
		
	
		
			
				
					|  |  |  |                 const { files } = await parse(ctx.req); | 
			
		
	
		
			
				
					|  |  |  |                 const file = files[0]; | 
			
		
	
		
			
				
					|  |  |  |                 const extname = path.extname(file.filename).toLowerCase(); | 
			
		
	
		
			
				
					|  |  |  |                 const fileType = ctx.query.type || "image"; | 
			
		
	
		
			
				
					|  |  |  |                 const fileFolder = ctx.query.fileFolder || 'common'; | 
			
		
	
		
			
				
					|  |  |  |                 if (ext[fileType].indexOf(extname) < 0) { | 
			
		
	
		
			
				
					|  |  |  |                     ctx.status = 400; | 
			
		
	
		
			
				
					|  |  |  |                     ctx.body = JSON.stringify({ name: 'UploadFailed', message: '文件格式无效' }); | 
			
		
	
		
			
				
					|  |  |  |                     return; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 const date = new Date().toLocaleDateString(); | 
			
		
	
		
			
				
					|  |  |  |                 const time = new Date().getTime(); | 
			
		
	
		
			
				
					|  |  |  |                 let fileName = time + '_' + file.filename; | 
			
		
	
		
			
				
					|  |  |  |                 let saveFile = path.join(__dirname, '../../', `/client/assets/files/${fileFolder}`, fileName); | 
			
		
	
		
			
				
					|  |  |  |                 const pathUrl = `./client/assets/files/${fileFolder}`; | 
			
		
	
		
			
				
					|  |  |  |          ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |          ctx.body = { | 
			
		
	
		
			
				
					|  |  |  |             root: apiUrl, | 
			
		
	
		
			
				
					|  |  |  |             iotAuthWeb | 
			
		
	
		
			
				
					|  |  |  |          }; | 
			
		
	
		
			
				
					|  |  |  |       }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                 const res1 = fs.existsSync(`./client/assets/files/${fileFolder}`); | 
			
		
	
		
			
				
					|  |  |  |                 !res1 && fs.mkdirSync(`./client/assets/files/${fileFolder}`); | 
			
		
	
		
			
				
					|  |  |  |                 const res = fs.existsSync(pathUrl); | 
			
		
	
		
			
				
					|  |  |  |                 !res && fs.mkdirSync(pathUrl); | 
			
		
	
		
			
				
					|  |  |  |                 let stream = fs.createWriteStream(saveFile); | 
			
		
	
		
			
				
					|  |  |  |                 fs.createReadStream(file.path).pipe(stream); | 
			
		
	
		
			
				
					|  |  |  |                 stream.on('error', function (err) { | 
			
		
	
		
			
				
					|  |  |  |                     app.fs.logger.log('error', '[Upload Heatmap]', err); | 
			
		
	
		
			
				
					|  |  |  |                 }); | 
			
		
	
		
			
				
					|  |  |  |                 ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |                 ctx.body = { filename: path.join(`/assets/files/${fileFolder}`, fileName), name: 'UploadSuccess', message: '上传成功' }; | 
			
		
	
		
			
				
					|  |  |  |             } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |                 ctx.status = 500; | 
			
		
	
		
			
				
					|  |  |  |                 ctx.fs.logger.error(err); | 
			
		
	
		
			
				
					|  |  |  |                 ctx.body = { err: 'upload error.' }; | 
			
		
	
		
			
				
					|  |  |  |       let upload = async function (ctx, next) { | 
			
		
	
		
			
				
					|  |  |  |          try { | 
			
		
	
		
			
				
					|  |  |  |             const { files } = await parse(ctx.req); | 
			
		
	
		
			
				
					|  |  |  |             const file = files[0]; | 
			
		
	
		
			
				
					|  |  |  |             const extname = path.extname(file.filename).toLowerCase(); | 
			
		
	
		
			
				
					|  |  |  |             const fileType = ctx.query.type || "image"; | 
			
		
	
		
			
				
					|  |  |  |             const fileFolder = ctx.query.fileFolder || 'common'; | 
			
		
	
		
			
				
					|  |  |  |             if (ext[fileType].indexOf(extname) < 0) { | 
			
		
	
		
			
				
					|  |  |  |                ctx.status = 400; | 
			
		
	
		
			
				
					|  |  |  |                ctx.body = JSON.stringify({ name: 'UploadFailed', message: '文件格式无效' }); | 
			
		
	
		
			
				
					|  |  |  |                return; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |             const date = new Date().toLocaleDateString(); | 
			
		
	
		
			
				
					|  |  |  |             const time = new Date().getTime(); | 
			
		
	
		
			
				
					|  |  |  |             let fileName = time + '_' + file.filename; | 
			
		
	
		
			
				
					|  |  |  |             let saveFile = path.join(__dirname, '../../', `/client/assets/files/${fileFolder}`, fileName); | 
			
		
	
		
			
				
					|  |  |  |             const pathUrl = `./client/assets/files/${fileFolder}`; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         let remove = async function (ctx, next) { | 
			
		
	
		
			
				
					|  |  |  |             try { | 
			
		
	
		
			
				
					|  |  |  |                 const fkeys = ctx.request.body; | 
			
		
	
		
			
				
					|  |  |  |                 let removeUrl = path.join(__dirname, '../../', './client', fkeys.url); | 
			
		
	
		
			
				
					|  |  |  |                 const res = fs.existsSync(removeUrl); | 
			
		
	
		
			
				
					|  |  |  |                 if (!res) { | 
			
		
	
		
			
				
					|  |  |  |                     ctx.status = 400; | 
			
		
	
		
			
				
					|  |  |  |                     ctx.body = JSON.stringify({ name: 'DeleteFailed', message: '文件地址不存在' }); | 
			
		
	
		
			
				
					|  |  |  |                     return; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 fs.unlink(removeUrl, function (error) { | 
			
		
	
		
			
				
					|  |  |  |                     if (error) { | 
			
		
	
		
			
				
					|  |  |  |                         console.log(error); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                 }) | 
			
		
	
		
			
				
					|  |  |  |                 ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |                 ctx.body = { name: 'DeleteSuccess.', message: '删除成功' }; | 
			
		
	
		
			
				
					|  |  |  |             } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |                 ctx.status = 500; | 
			
		
	
		
			
				
					|  |  |  |                 ctx.fs.logger.error(err); | 
			
		
	
		
			
				
					|  |  |  |                 ctx.body = { err: 'upload cleanup error.' }; | 
			
		
	
		
			
				
					|  |  |  |             const res1 = fs.existsSync(`./client/assets/files/${fileFolder}`); | 
			
		
	
		
			
				
					|  |  |  |             !res1 && fs.mkdirSync(`./client/assets/files/${fileFolder}`); | 
			
		
	
		
			
				
					|  |  |  |             const res = fs.existsSync(pathUrl); | 
			
		
	
		
			
				
					|  |  |  |             !res && fs.mkdirSync(pathUrl); | 
			
		
	
		
			
				
					|  |  |  |             let stream = fs.createWriteStream(saveFile); | 
			
		
	
		
			
				
					|  |  |  |             fs.createReadStream(file.path).pipe(stream); | 
			
		
	
		
			
				
					|  |  |  |             stream.on('error', function (err) { | 
			
		
	
		
			
				
					|  |  |  |                app.fs.logger.log('error', '[Upload Heatmap]', err); | 
			
		
	
		
			
				
					|  |  |  |             }); | 
			
		
	
		
			
				
					|  |  |  |             ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |             ctx.body = { filename: path.join(`/assets/files/${fileFolder}`, fileName), name: 'UploadSuccess', message: '上传成功' }; | 
			
		
	
		
			
				
					|  |  |  |          } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |             ctx.status = 500; | 
			
		
	
		
			
				
					|  |  |  |             ctx.fs.logger.error(err); | 
			
		
	
		
			
				
					|  |  |  |             ctx.body = { err: 'upload error.' }; | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       let remove = async function (ctx, next) { | 
			
		
	
		
			
				
					|  |  |  |          try { | 
			
		
	
		
			
				
					|  |  |  |             const fkeys = ctx.request.body; | 
			
		
	
		
			
				
					|  |  |  |             let removeUrl = path.join(__dirname, '../../', './client', fkeys.url); | 
			
		
	
		
			
				
					|  |  |  |             const res = fs.existsSync(removeUrl); | 
			
		
	
		
			
				
					|  |  |  |             if (!res) { | 
			
		
	
		
			
				
					|  |  |  |                ctx.status = 400; | 
			
		
	
		
			
				
					|  |  |  |                ctx.body = JSON.stringify({ name: 'DeleteFailed', message: '文件地址不存在' }); | 
			
		
	
		
			
				
					|  |  |  |                return; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |             fs.unlink(removeUrl, function (error) { | 
			
		
	
		
			
				
					|  |  |  |                if (error) { | 
			
		
	
		
			
				
					|  |  |  |                   console.log(error); | 
			
		
	
		
			
				
					|  |  |  |                } | 
			
		
	
		
			
				
					|  |  |  |             }) | 
			
		
	
		
			
				
					|  |  |  |             ctx.status = 200; | 
			
		
	
		
			
				
					|  |  |  |             ctx.body = { name: 'DeleteSuccess.', message: '删除成功' }; | 
			
		
	
		
			
				
					|  |  |  |          } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |             ctx.status = 500; | 
			
		
	
		
			
				
					|  |  |  |             ctx.fs.logger.error(err); | 
			
		
	
		
			
				
					|  |  |  |             ctx.body = { err: 'upload cleanup error.' }; | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         router.get('/api/root', getApiRoot); | 
			
		
	
		
			
				
					|  |  |  |         router.post('/_upload/new', upload); | 
			
		
	
		
			
				
					|  |  |  |         router.delete('/_upload/cleanup', remove); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |       router.get('/api/root', getApiRoot); | 
			
		
	
		
			
				
					|  |  |  |       router.post('/_upload/new', upload); | 
			
		
	
		
			
				
					|  |  |  |       router.delete('/_upload/cleanup', remove); | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
	
		
			
				
					|  |  | 
 |