zoukankan      html  css  js  c++  java
  • ASP.NET大文件分片上传

    文件夹数据库处理逻辑

    public class DbFolder

    {

        JSONObject root;

       

        public DbFolder()

        {

            this.root = new JSONObject();

            this.root.put("f_id""");

            this.root.put("f_nameLoc""根目录");

            this.root.put("f_pid""");

            this.root.put("f_pidRoot""");

        }

       

        /**

         将JSONArray转换成map

         @param folders

         @return

         */

        public Map<String, JSONObject> toDic(JSONArray folders)

        {

            Map<String, JSONObject> dt = new HashMap<String, JSONObject>();

            for(int i = 0 , l = folders.size();i<l;++i)

            {

                JSONObject o = folders.getJSONObject(i);

                String id = o.getString("f_id");

                dt.put(id, o);

            }

            return dt;

        }

       

        public Map<String, JSONObject> foldersToDic(String pidRoot)

        {

            //默认加载根目录

            String sql = String.format("select f_id,f_nameLoc,f_pid,f_pidRoot from up6_folders where f_pidRoot='%s'", pidRoot);

     

            SqlExec se = new SqlExec();

            JSONArray folders = se.exec("up6_folders", sql, "f_id,f_nameLoc,f_pid,f_pidRoot","");

            return this.toDic(folders);

        }

       

        public ArrayList<JSONObject> sortByPid( Map<String, JSONObject> dt, String idCur, ArrayList<JSONObject> psort) {

     

            String cur = idCur;

            while (true)

            {

                //key不存在

                if (!dt.containsKey(cur)) break;

     

                JSONObject d = dt.get(cur);//查父ID

                psort.add(0, d);//将父节点排在前面           

                cur = d.getString("f_pid").trim();//取父级ID

     

                if (cur.trim() == "0"break;

                if ( StringUtils.isBlank(cur) ) break;

            }

            return psort;

        }

       

     

        public JSONArray build_path_by_id(JSONObject fdCur) {

     

            String id = fdCur.getString("f_id").trim();//

            String pidRoot = fdCur.getString("f_pidRoot").trim();//

     

            //根目录

            ArrayList<JSONObject> psort = new ArrayList<JSONObject>();

            if (StringUtils.isBlank(id))

            {

                psort.add(0, this.root);

     

                return JSONArray.fromObject(psort);

            }

     

            //构建目录映射表(id,folder)

            Map<String, JSONObject> dt = this.foldersToDic(pidRoot);

     

            //按层级顺序排列目录

            psort = this.sortByPid(dt, id, psort);

     

            SqlExec se = new SqlExec();

            //是子目录->添加根目录

            if (!StringUtils.isBlank(pidRoot))

            {

                JSONObject root = se.read("up6_files"

                        "f_id,f_nameLoc,f_pid,f_pidRoot"

                        new SqlParam[] { new SqlParam("f_id", pidRoot) });

                psort.add(0, root);

            }//是根目录->添加根目录

            else if (!StringUtils.isBlank(id) && StringUtils.isBlank(pidRoot))

            {

                JSONObject root = se.read("up6_files"

                        "f_id,f_nameLoc,f_pid,f_pidRoot"

                        new SqlParam[] { new SqlParam("f_id", id) });

                psort.add(0, root);

            }

            psort.add(0, this.root);

     

            return JSONArray.fromObject(psort);

        }

       

        public FileInf read(String id) {

            SqlExec se = new SqlExec();

            String sql = String.format("select f_pid,f_pidRoot,f_pathSvr from up6_files where f_id='%s' union select f_pid,f_pidRoot,f_pathSvr from up6_folders where f_id='%s'", id,id);

            JSONArray data = se.exec("up6_files", sql, "f_pid,f_pidRoot,f_pathSvr","");

            JSONObject o = (JSONObject)data.get(0);

     

            FileInf file = new FileInf();

            file.id = id;

            file.pid = o.getString("f_pid").trim();

            file.pidRoot = o.getString("f_pidRoot").trim();

            file.pathSvr = o.getString("f_pathSvr").trim();

            return file;

        }

       

        public Boolean exist_same_file(String name,String pid)

        {

            SqlWhereMerge swm = new SqlWhereMerge();

            swm.equal("f_nameLoc", name.trim());

            swm.equal("f_pid", pid.trim());

            swm.equal("f_deleted", 0);

     

            String sql = String.format("select f_id from up6_files where %s ", swm.to_sql());

     

            SqlExec se = new SqlExec();

            JSONArray arr = se.exec("up6_files", sql, "f_id""");

            return arr.size() > 0;

        }

       

        /**

         检查是否存在同名目录

         @param name

         @param pid

         @return

         */

        public Boolean exist_same_folder(String name,String pid)

        {

            SqlWhereMerge swm = new SqlWhereMerge();

            swm.equal("f_nameLoc", name.trim());

            swm.equal("f_deleted", 0);

            swm.equal("LTRIM (f_pid)", pid.trim());

            String where = swm.to_sql();

     

            String sql = String.format("(select f_id from up6_files where %s ) union (select f_id from up6_folders where %s)", where,where);

     

            SqlExec se = new SqlExec();

            JSONArray fid = se.exec("up6_files", sql, "f_id""");

            return fid.size() > 0;     

        }

       

        public Boolean rename_file_check(String newName,String pid)

        {

            SqlExec se = new SqlExec();           

            JSONArray res = se.select("up6_files"

                "f_id"

                ,new SqlParam[] {

                    new SqlParam("f_nameLoc",newName)

                    ,new SqlParam("f_pid",pid)

                },"");

            return res.size() > 0;

        }

       

        public Boolean rename_folder_check(String newName, String pid)

        {

            SqlExec se = new SqlExec();

            JSONArray res = se.select("up6_folders"

                "f_id"

                new SqlParam[] {

                    new SqlParam("f_nameLoc",newName)

                    ,new SqlParam("f_pid",pid)

                },"");

            return res.size() > 0;

        }

     

        public void rename_file(String name,String id) {

            SqlExec se = new SqlExec();

            se.update("up6_files"

                new SqlParam[] { new SqlParam("f_nameLoc", name) }

                new SqlParam[] { new SqlParam("f_id", id) });

        }

       

        public void rename_folder(String name, String id, String pid) {

            SqlExec se = new SqlExec();

            se.update("up6_folders"

                new SqlParam[] { new SqlParam("f_nameLoc", name) }

                new SqlParam[] { new SqlParam("f_id", id) });

        }

    }

     

    1.在webuploader.js大概4880行代码左右,在动态生成的input组件的下面(也可以直接搜索input),增加webkitdirectory属性。

    function FileUploader(fileLoc, mgr)

    {

        var _this = this;

        this.id = fileLoc.id;

        this.ui = { msg: null, process: null, percent: null, btn: { del: null, cancel: null,post:null,stop:null }, div: null};

        this.isFolder = false//不是文件夹

        this.app = mgr.app;

        this.Manager = mgr; //上传管理器指针

        this.event = mgr.event;

        this.Config = mgr.Config;

        this.fields = jQuery.extend({}, mgr.Config.Fields, fileLoc.fields);//每一个对象自带一个fields幅本

        this.State = this.Config.state.None;

        this.uid = this.fields.uid;

        this.fileSvr = {

              pid: ""

            , id: ""

            , pidRoot: ""

            , f_fdTask: false

            , f_fdChild: false

            , uid: 0

            , nameLoc: ""

            , nameSvr: ""

            , pathLoc: ""

            , pathSvr: ""

            , pathRel: ""

            , md5: ""

            , lenLoc: "0"

            , sizeLoc: ""

            , FilePos: "0"

            , lenSvr: "0"

            , perSvr: "0%"

            , complete: false

            , deleted: false

        };//json obj,服务器文件信息

        this.fileSvr = jQuery.extend(this.fileSvr, fileLoc);

    2.可以获取路径

         this.open_files = function (json)

         {

             for (var i = 0, l = json.files.length; i < l; ++i)

            {

                 this.addFileLoc(json.files[i]);

             }

             setTimeout(function () { _this.PostFirst(); },500);

         };

         this.open_folders = function (json)

        {

            for (var i = 0, l = json.folders.length; i < l; ++i) {

                this.addFolderLoc(json.folders[i]);

            }

             setTimeout(function () { _this.PostFirst(); }, 500);

         };

         this.paste_files = function (json)

         {

             for (var i = 0, l = json.files.length; i < l; ++i)

             {

                 this.addFileLoc(json.files[i]);

             }

         };

     

     

    后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/07/java超大文件上传与下载/


  • 相关阅读:
    Encrypted Handshake Message
    RSAParameters Struct
    What if JWT is stolen?
    What's the difference between JWTs and Bearer Token?
    RSA Algorithm Example
    第18届Jolt大奖结果公布
    Ruby on rails开发从头来(windows)(三十六) 调试技巧
    Ruby on rails开发从头来(四十二) ActiveRecord基础(主键和ID)
    YouTube开放基础技术架构 让用户建自家YouTube
    Ruby on rails开发从头来(四十) ActiveRecord基础(Boolean属性)
  • 原文地址:https://www.cnblogs.com/songsu/p/11883086.html
Copyright © 2011-2022 走看看