提交 691cf39d authored 作者: GOD_ZYX's avatar GOD_ZYX

追加 上传文件 行为统计

上级 1946eb72
No preview for this file type
/* 引入 公共 工具类 */
const cTool = require('../tools')
const Router = require('express').Router
const router = Router()
const bodyParser = require('body-parser')
......@@ -9,6 +11,7 @@ const conf = require('../config')
const _ = require('lodash')
const md5 = require('md5-node')
const fs = require('fs')
const path = require('path')
/**
* 禁止响应头 中设置 cookie值
......@@ -47,6 +50,38 @@ const agentProcessor = () => {
req.files.forEach((elem, i) => {
/* 缓存文件中 名称替换,上传名称一致 会被覆盖 */
fs.renameSync(elem.path, elem.destination + elem.originalname)
/* 增加 日期目录 */
let dateDir = cTool.convertTime.durationToDateString(new Date().getTime())
/* 增加 学员目录 */
let stuDir = req.headers['cur-auth'] || '其他'
fs.stat(elem.destination + dateDir, (error, stats) => {
if (error) {
fs.mkdir(elem.destination + dateDir, (error) => {
if (error) { console.log(error); return false }
console.log('[Node] ' + dateDir + 'success to create dir')
fs.mkdir(elem.destination + dateDir + '/' + stuDir, (error) => {
if (error) { console.log(error); return false }
console.log('[Node] ' + stuDir + 'success to create dir')
fs.renameSync(elem.destination + elem.originalname, elem.destination + dateDir + '/' + stuDir + '/' + elem.originalname)
fs.unlink(elem.destination + elem.originalname, (error) => { if (error) console.log(error) })
})
})
} else {
fs.stat(elem.destination + dateDir + '/' + stuDir, (error, stats) => {
if (error) {
fs.mkdir(elem.destination + dateDir + '/' + stuDir, (error) => {
if (error) { console.log(error); return false }
console.log('[Node] ' + stuDir + '创建目录成功')
fs.renameSync(elem.destination + elem.originalname, elem.destination + dateDir + '/' + stuDir + '/' + elem.originalname)
fs.unlink(elem.destination + elem.originalname, (error) => { if (error) console.log(error) })
})
} else {
fs.renameSync(elem.destination + elem.originalname, elem.destination + dateDir + '/' + stuDir + '/' + elem.originalname)
fs.unlink(elem.destination + elem.originalname, (error) => { if (error) console.log(error) })
}
})
}
})
_obj[elem.fieldname] = fs.createReadStream(elem.destination + elem.originalname)
})
let fro = new FormData()
......@@ -116,7 +151,85 @@ const setPorxyHeader = (data, res) => {
router.use(bodyParser.json({ limit: '600kb' }))
router.use(bodyParser.urlencoded({ extended: true, limit: '600kb' }))
const postDirOperate = (req, res) => {
let operate = req.body.operate || ''
let timestamp = Math.floor(new Date().getTime() / 100000000) + '00000000'
let md5Str = md5('ezijing.com' + timestamp)
if (operate === 'get-md5') {
res.status(200)
res.json({ 'timestamp': timestamp, 'MD5-auth': md5Str })
return
}
let dir = req.body.dir || ''
let auth = req.headers.auth || ''
if (auth === md5Str) {
let json = {}
json.dirPath = dir
json.arrJson = {}
fs.stat(dir, (error, stats) => {
if (error) {
json.arrJson.msg = '当前目录,或文件不存在'
res.status(200)
res.json(json)
} else {
if (operate === 'delete') {
if (stats.isFile()) {
fs.unlink(dir, (error) => { if (error) console.log(error) })
} else if (stats.isDirectory()) {
_rmdir(dir, () => { json.arrJson.msg = '删除成功' })
}
json.arrJson.msg = json.arrJson.msg || '操作完成,请重新查询上级目录'
res.status(200)
res.json(json)
} else if (operate === 'list') {
let pa = fs.readdirSync(dir)
let dirStr = 'dir'
let dirCount = 0
let fileStr = 'file'
let fileCount = 0
for (let j = 0; j < pa.length; j++) {
let elem = pa[j]
let stat = fs.statSync(path.resolve(dir, elem))
if (stat.isFile()) {
json.arrJson[fileStr + (fileCount++)] = elem
}
if (stat.isDirectory()) {
json.arrJson[dirStr + (dirCount++)] = elem
}
}
res.status(200)
res.json(json)
} else {
res.status(200)
res.json({ 'msg': 'operate 参数错误' })
}
}
})
} else {
res.status(200)
res.json({ 'msg': '没有权限,访问该接口' })
}
}
const _rmdir = (dir, callback) => {
let pa = fs.readdirSync(dir)
for (let j = 0; j < pa.length; j++) {
let elem = pa[j]
let stat = fs.statSync(path.resolve(dir, elem))
if (stat.isFile()) {
fs.unlink(path.resolve(dir, elem), () => {})
}
if (stat.isDirectory()) {
_rmdir(path.resolve(dir, elem), callback)
}
}
fs.rmdirSync(dir)
callback()
}
/* 统一API接口 */
router.use('/api/*', upload.any(), agentProcessor('api'))
router.post('/api-abc/dir/operate', upload.any(), postDirOperate)
module.exports = router
module.exports = {
/**
* 工具方法 - 日期时间 转化 y-m-d
* @param {[string]} duration 时间戳
*/
durationToDateString: (duration) => {
let y = new Date(duration).getFullYear()
let m = new Date(duration).getMonth() + 1
if (m < 10) {
m = '0' + m
} else {
m = m + ''
}
let d = new Date(duration).getDate()
if (d < 10) {
d = '0' + d
} else {
d = d + ''
}
return y + '-' + m + '-' + d
},
/**
* 工具方法 - 播放时间 转化 h:m:s
* @param {[string]} duration 时间戳
*/
durationToTimeString: (duration) => {
let h = Math.floor(duration / 3600)
let m = Math.floor((duration - h * 3600) / 60)
let s = (duration - h * 3600 - m * 60) % 60
function tenify (a) {
return a >= 10 ? a : '0' + a
}
let to = { h: tenify(h), m: tenify(m), s: tenify(s) }
let format = 'h:m:s'
return format.replace(/h|m|s/g, k => to[k]).replace(/^00:/, '')
}
}
const ConvertTime = require('./convert_time')
module.exports = {
convertTime: ConvertTime
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论