file.js 2.66 KB
'use strict';

const _ = require('lodash');
const moment = require('moment');
const Router = require('koa-router');
const router = new Router();
const FileApi = require('../../ci/file');
const qn = require('../../../lib/qiniu');

const QINIU_PREFIX = 'yoho';

/**
 * 处理列表数据
 */
const _handleListItems = items => {
    _.forEach(items, perFile => {
        perFile.fsizekb = (perFile.fsize / 1024).toFixed(2) + 'kb';

        let dateTime = _.parseInt(perFile.putTime.toString().substring(0, 13));

        perFile.putTimeFormat = moment(dateTime).format('YYYY-MM-DD HH:mm');
    });

    return items;
};

/**
 * 校验是否是允许上传的文件包
 */
const _verifyFiles = filesList => {
    return true;
};

const file =  {
    /**
     * 文件管理页面
     */
    page: async(ctx) => {
        await ctx.render('/action/file_page');
    },

    /**
     * 列出上传记录
     */
    listLogs: async(ctx) => {
        let fileApi = new FileApi();
        let result = await fileApi.getAllLogs({
            page: ctx.query.page
        });

        ctx.body = {
            code: 200,
            message: '',
            data: result
        }
    },

    /**
     * 列出包内的文件
     */
    listFiles: async(ctx) => {
        let params = {
            prefix: QINIU_PREFIX + ctx.query.actPath,
            limit: 20
        };

        if (ctx.query.marker) {
            params.marker = ctx.query.marker;
        }

        let result = await qn.listAsync(params);
        let finalResult = {
            items: _handleListItems(result.items)
        };

        if (result.marker) {
            finalResult.marker = result.marker;
        }

        ctx.body = {
            code: 200,
            message: '',
            data: finalResult
        };
    },

    /**
     * 上传处理
     */
    upload: async(ctx, next) => {
        if ('POST' !== ctx.method) return await next();

        let file = _.get(ctx, 'request.body._files.file');

        if (!file) {
            return ctx.body = {
                code: 400,
                message: '没有接收到上传文件'
            }; 
        }

        let actPath = _.get(ctx, 'request.body.actPath');

        actPath = 'activity/2017/09/famous/007';

        if (!actPath) {
            return ctx.body = {
                code: 400,
                message: '请指定路径'
            }; 
        }

        let fileApi = new FileApi();
        let result  = await fileApi.upload(file, actPath);

        ctx.body = result;
    }
}

router.get('/page', file.page);
router.get('/listlogs', file.listLogs);
router.get('/listfiles', file.listFiles);
router.post('/upload', file.upload);

module.exports = router;