知启蒙大文件上传组件,该组件实现大文件分片上传,包含服务端接收碎片上传和管理功能,以及前端UI的进度条、上传速度等界面。同时还支持按文件内容MD5码、相同文件名称比对秒传等功能,是业务系统应用不可缺少的组件之一。

森中灵 最后提交于4月前 修改JS为8.0.6
ZulBootstrap.java3KB
/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙,邂逅框架梦,本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_components/zhiqim_upload_large.htm
 *
 * Zhiqim UploadLarge is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.uploadlarge;

import org.zhiqim.httpd.context.ServiceExecutor;
import org.zhiqim.httpd.context.ZmlBootstrap;
import org.zhiqim.kernel.Z;
import org.zhiqim.kernel.config.ItemType;
import org.zhiqim.kernel.schedule.Day;
import org.zhiqim.kernel.schedule.Scheduler;
import org.zhiqim.manager.dao.ZmrParamDao;
import org.zhiqim.uploadlarge.service.ZulAccess;
import org.zhiqim.uploadlarge.service.ZulService;

/**
 * 大文件上传引导类
 *
 * @version v1.0.0 @author zouzhigang 2018-11-23 新建与整理
 */
public class ZulBootstrap extends ZmlBootstrap implements ZulConstants
{
    private Scheduler scheduler;
    private boolean self;
    private static Day task;
    
    /*******************************************************************************/
    //初始化&销毁
    /*******************************************************************************/
    
    @Override /** 初始化之前 */
    protected void initBefore() throws Exception
    {
        //1.把本对象加入到上下文中方便找到该类
        context.setAttribute(ZulBootstrap.class, this);
        
        //2.在配置加载之后,把/service/uploadlarge和/service/upll/*加到服务中
        ServiceExecutor executor = context.getServiceExecutor();
        executor.addService(_PATH_SERVICE_UPLOAD_LARGE_, new ZulService());
        executor.addService(_PATH_SERVICE_UPLOAD_LARGE_ACCESS_, new ZulAccess());
    }
    
    @Override  /** 初始化之后 */
    protected void initAfter() throws Exception
    {
        //1.检查参数
        ZmrParamDao.addGroupIfNotExists(ZUL_NAME, 2, ItemType.PROTECTED, "大文件上传");
        ZmrParamDao.addParamIfNotExists(ZUL_NAME, ZUL_ROOT_DIR,          "./data/uploadlarge",  1,  ItemType.PROTECTED, "大文件上传根目录");
        ZmrParamDao.addParamIfNotExists(ZUL_NAME, ZUL_ALLOW_EXTS,        "png,jpg,gif",         2,  ItemType.PUBLIC,    "大文件上传支持访问的类型");
        
        //2.增加定时任务清理上传文件碎片表
        initTask();
    }
    
    private void initTask()
    {
        if (task != null)
            return;
        
        //有可能是多个上下文环境都使用了该组件,只取第一个组件设置任务
        self = true;
        task = new Day(new ZulTask(), 5, 7, 7);
        scheduler = Z.glb().getc(Scheduler.class);
        scheduler.addTask(task);
    }
    
    @Override
    public void destroy()
    {
        if (self)
        {//由自己创建的,结束时清除
            scheduler.removeTask(task);
        }
    }
}