대용량 파일 업로드 및 자세한 코드 예제 WebUploader

데이터베이스 처리 로직 폴더

공용 클래스 DbFolder

{

    된 JSONObject 루트;

   

    공공 DbFolder ()

    {

        this.root 새로운 된 JSONObject를 () =;

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

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

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

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

    }

   

    / **

     * JSONArray지도로 변환

     * @param 폴더

     * @return

     * /

    공개지도 <문자열, 된 JSONObject> toDic (JSONArray 폴더)

    {

        지도 <문자열, 된 JSONObject> DT = 새의 HashMap <문자열, 된 JSONObject> ();

        대해 INT (I 0, L = folders.size을 () =; I <L; I ++)

        {

            된 JSONObject O = folders.getJSONObject (I);

            문자열 ID = o.getString ( "f_id");

            dt.put (ID, O);

        }

        DT 반환;

    }

   

    공개지도 <문자열, 된 JSONObject> foldersToDic (문자열 pidRoot)

    {

        // 기본 루트 디렉토리를로드

        문자열 SQL = 및 String.format ( "up6_folders에서 선택 f_id, f_nameLoc, f_pid, f_pidRoot 곳 f_pidRoot = '% s'이 (가)", pidRoot);

 

        SE = SQLEXEC 새로운 SQLEXEC ();

        JSONArray 폴더 = se.exec ( "up6_folders", SQL, "f_id, f_nameLoc, f_pid, f_pidRoot", "");

        this.toDic (폴더)을 반환;

    }

   

    공공 ArrayList를 <된 JSONObject> sortByPid (지도 <문자열, 된 JSONObject> DT, 문자열 idCur, ArrayList를 <된 JSONObject> psort) {

 

        문자열 CUR = idCur;

        (참) 동안

        {

            // 키가 존재하지 않습니다

            (! dt.containsKey (현재)) 휴식 경우;

 

            된 JSONObject dt.get D = (현재); // 상위 ID를 확인

            psort.add (0, d); // 친 노드 상면           

            CUR = d.getString ( "f_pid") 트림 (); // 부모 ID를 가지고

 

            (cur.trim () == "0") 어기면;

            (StringUtils.isBlank (현재)) 휴식 경우;

        }

        psort를 반환;

    }

   

 

    공공 JSONArray build_path_by_id (된 JSONObject fdCur) {

 

        문자열 ID = fdCur.getString ( "f_id") () 트림;. //

        문자열 pidRoot = fdCur.getString ( "f_pidRoot") () 트림;. //

 

        // 루트 디렉토리

        ArrayList를 <된 JSONObject> psort = 새로운 ArrayList를 <된 JSONObject> ();

        경우 (StringUtils.isBlank (ID))

        {

            psort.add (0 this.root);

 

            창 JSONArray.fromObject (psort);

        }

 

        // 빌드 디렉토리 매핑 테이블 (ID, 폴더)

        지도 <문자열, 된 JSONObject> DT = this.foldersToDic (pidRoot);

 

        // 계층 주문 카탈로그

        psort this.sortByPid = (DT, ID psort);

 

        SE = SQLEXEC 새로운 SQLEXEC ();

        > 루트 디렉토리 추가 - // 하위 디렉토리입니다

        만약 (! StringUtils.isBlank (pidRoot))

        {

            된 JSONObject 루트 = se.read ( "up6_files"

                    "f_id, f_nameLoc, f_pid, f_pidRoot"

                    새로운 SqlParam은 []) {새로운 SqlParam은 (pidRoot "f_id")};

            psort.add (0, 루트);

        } // 루트 디렉토리 -> 추가 루트 디렉토리

        다른 경우 (! StringUtils.isBlank (ID) && StringUtils.isBlank (pidRoot))

        {

            된 JSONObject 루트 = se.read ( "up6_files"

                    "f_id, f_nameLoc, f_pid, f_pidRoot"

                    새로운 SqlParam은 [{새로운 SqlParam는 ( "f_id"ID)});

            psort.add (0, 루트);

        }

        psort.add (0 this.root);

 

        창 JSONArray.fromObject (psort);

    }

   

    공공 FileInf 읽기 (문자열 ID) {

        SE = SQLEXEC 새로운 SQLEXEC ();

        문자열 SQL = 및 String.format는 ( "f_id = '% s'이 (가) 노동 조합이 up6_folders에서 f_pid, f_pidRoot, f_pathSvr을 선택 곳 up6_files에서 f_pid, f_pidRoot, f_pathSvr을 선택한 경우 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") (트림).;

        file.pidRoot = o.getString ( "f_pidRoot") (트림).;

        file.pathSvr = o.getString ( "f_pathSvr") (트림).;

        파일을 반환;

    }

   

    공공 부울 exist_same_file (문자열 이름, 문자열 PID)

    {

        SqlWhereMerge 새로운 SqlWhereMerge 량 = ();

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

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

        swm.equal ( "f_deleted", 0);

 

        문자열 및 String.format는 SQL = ( "up6_files에서 선택 f_id 여기서 % S"swm.to_sql ());

 

        SE = SQLEXEC 새로운 SQLEXEC ();

        JSONArray 도착 = se.exec ( "up6_files"SQL "f_id", "");

        > 0) (arr.size를 리턴;

    }

   

    / **

     같은 이름의 디렉토리가 있는지 * 확인

     * @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 ());

        여기서 문자열 swm.to_sql = ();

 

        문자열 SQL = 및 String.format는 ( "% s의) 노동 조합 (up6_folders %의)에서 f_id 선택 곳 (up6_files에서 f_id 선택"어디, 어디);

 

        SE = SQLEXEC 새로운 SQLEXEC ();

        JSONArray FID = se.exec ( "up6_files"SQL "f_id", "");

        리턴 fid.size ()> 0;     

    }

   

    공공 부울 rename_file_check (문자열 newName로, 문자열 PID)

    {

        SE = SQLEXEC 새로운 SQLEXEC ();           

        JSONArray 고해상도 = se.select ( "up6_files"

            "f_id"

            새로운 SqlParam [{

                새로운 SqlParam ( "f_nameLoc", newName로)

                새로운 SqlParam ( "f_pid", PID)

            } "");

        리턴 res.size ()> 0;

    }

   

    공공 부울 rename_folder_check (문자열 newName로, 문자열 PID)

    {

        SE = SQLEXEC 새로운 SQLEXEC ();

        JSONArray 고해상도 = se.select ( "up6_folders"

            "f_id"

            새로운 SqlParam [{

                새로운 SqlParam ( "f_nameLoc", newName로)

                새로운 SqlParam ( "f_pid", PID)

            } "");

        리턴 res.size ()> 0;

    }

 

    공공 무효 rename_file (문자열 이름, 문자열 ID) {

        SE = SQLEXEC 새로운 SQLEXEC ();

        se.update ( "up6_files"

            새로운 SqlParam [{새로운 SqlParam ( "f_nameLoc"명)}

            새로운 SqlParam은 [{새로운 SqlParam는 ( "f_id"ID)});

    }

   

    공공 무효 rename_folder (문자열 이름, 문자열 ID, 문자열 PID) {

        SE = SQLEXEC 새로운 SQLEXEC ();

        se.update ( "up6_folders"

            새로운 SqlParam [{새로운 SqlParam ( "f_nameLoc"명)}

            새로운 SqlParam은 [{새로운 SqlParam는 ( "f_id"ID)});

    }

}

 

1. webuploader.js 아마도 코드의 4880 개 라인들에 대해, 다음의 동적으로 생성 된 입력 요소 (입력 직접 검색 할 수있다) webkitdirectory 특성을 증가시킨다.

함수 FileUploader (fileLoc, MGR)

{

    VAR =이 _this;

    this.id = fileLoc.id;

    this.ui = {MSG : 널 (null) 공정 : 널 (null), 퍼센트 : 널 (null), BTN : {델 : 널 (null) 취소 : 널 (null), 게시물 : 널 (null), 정지 : 널 (null)}를, 사업부 : 널 (null)};

    this.isFolder 거짓 =; //하지 폴더

    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 : 거짓

        , f_fdChild : 거짓

        , uid 대체 : 0

        , nameLoc ""

        , nameSvr ""

        , pathLoc ""

        , pathSvr ""

        , pathRel ""

        , MD5 : ""

        , lenLoc : "0"

        , sizeLoc ""

        , FilePos : "0"

        , lenSvr : "0"

        , perSvr : "0 %"

        완료 : 거짓

        삭제 : 거짓

    }; // JSON OBJ, 파일 서버 정보

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

2. 경로를 얻을 수 있습니다

     this.open_files = 함수 (JSON)

     {

         위한 VAR (I 0, L = json.files.length를 = 나는 <L; I ++)

        {

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

         }

         에서는 setTimeout (함수 () {_this.PostFirst ()}, 500);

     };

     this.open_folders = 함수 (JSON)

    {

        위한 VAR (I 0, L = json.folders.length를 = 나는 <L; I ++) {

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

        }

         에서는 setTimeout (함수 () {_this.PostFirst ()}, 500);

     };

     this.paste_files = 함수 (JSON)

     {

         위한 VAR (I 0, L = json.files.length를 = 나는 <L; I ++)

         {

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

         }

     };

 

 

백엔드 코드 로직의 대부분은 현재의 MySQL, 오라클, SQL을 지원 동일합니다. 데이터베이스를 구성 할 필요성을 사용하기 전에이 문서 작성하는 저를 참조 할 수 있습니다 : http://blog.ncmem.com/wordpress/2019/08/07/java 업로드 큰 파일을 다운로드 /

 

추천

출처www.cnblogs.com/songsu/p/12553671.html