VUEが大きなファイルをアップロードするための3つのソリューション

フォルダーデータベース処理ロジック

パブリッククラスDbFolder

{

    JSONObjectルート;

   

    パブリック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をマップに変換します

     * @paramフォルダ

     * @return

     * /

    public Map <String、JSONObject> toDic(JSONArray folder)

    {

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

        for(int i = 0、l = folder.size(); i <l; ++ i)

        {

            JSONObject o = folder.getJSONObject(i);

            文字列id = o.getString( "f_id");

            dt.put(id、o);

        }

        dtを返す;

    }

   

    public Map <String、JSONObject> folderToDic(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フォルダー= se.exec( "up6_folders"、sql、 "f_id、f_nameLoc、f_pid、f_pidRoot"、 "");

        this.toDic(folders);を返します。

    }

   

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

 

        文字列cur = idCur;

        while(true)

        {

            //キーは存在しません

            if(!dt.containsKey(cur))ブレーク;

 

            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))ブレーク;

        }

        psortを返します。

    }

   

 

    public JSONArray build_path_by_id(JSONObject fdCur){

 

        文字列id = fdCur.getString( "f_id")。trim(); //

        文字列pidRoot = fdCur.getString( "f_pidRoot")。trim(); //

 

        //ルートディレクトリ

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

        if(StringUtils.isBlank(id))

        {

            psort.add(0、this.root);

 

            JSONArray.fromObject(psort);を返します。

        }

 

        //ディレクトリマッピングテーブル(ID、フォルダ)を作成します

        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);

 

        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データ= se.exec( "up6_files"、sql、 "f_pid、f_pidRoot、f_pathSvr"、 "");

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

 

        FileInfファイル=新しい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();

        ファイルを返す;

    }

   

    パブリックブールexist_same_file(文字列名、文字列pid)

    {

        SqlWhereMerge量=新しい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"、 "");

        arr.size()> 0を返します。

    }

   

    / **

     *同じ名前のディレクトリがあるかどうかを確認します

     * @param name

     * @param pid

     * @return

     * /

    パブリックブールexist_same_folder(文字列名、文字列pid)

    {

        SqlWhereMerge量=新しい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( "(up6_files where%sからf_idを選択)ユニオン(up6_folders where%sからf_idを選択)"、where、where);

 

        SqlExec se = new SqlExec();

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

        fid.size()> 0を返します。     

    }

   

    public Boolean rename_file_check(String newName、String pid)

    {

        SqlExec se = new SqlExec();           

        JSONArray res = se.select( "up6_files"

            、「f_id」

            、新しいSqlParam [] {

                新しいSqlParam( "f_nameLoc"、newName)

                、新しいSqlParam( "f_pid"、pid)

            }、 "");

        res.size()> 0を返します。

    }

   

    public Boolean rename_folder_check(String newName、String pid)

    {

        SqlExec se = new SqlExec();

        JSONArray res = se.select( "up6_folders"

            、「f_id」

            、新しいSqlParam [] {

                新しいSqlParam( "f_nameLoc"、newName)

                、新しいSqlParam( "f_pid"、pid)

            }、 "");

        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行のコードで、動的に生成された入力コンポーネント(入力を直接検索することもできます)の下に、webkitdirectory属性を追加します。

関数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); //各オブジェクトにはフィールドサイズが付属しています

    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%"

        、完全:false

        、削除済み: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 巨大なファイルのアップロードとダウンロード/

グループに参加して議論することができます:374992201

おすすめ

転載: www.cnblogs.com/songsu/p/12692944.html