폴더 데이터베이스 처리 논리
공용 클래스 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
* /
공용 Map <String, JSONObject> toDic (JSONArray 폴더)
{
Map <String, JSONObject> dt = new HashMap <String, JSONObject> ();
for (int i = 0, l = folders.size (); i <l; ++ i)
{
JSONObject o = folders.getJSONObject (i);
문자열 id = o.getString ( "f_id");
dt.put (id, o);
}
반환 dt;
}
공용 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 = 새로운 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) {
문자열 cur = idCur;
while (true)
{
// 키가 없습니다.
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;
}
반환 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);
return JSONArray.fromObject (psort);
}
// 디렉터리 매핑 테이블 (ID, 폴더) 작성
Map <String, JSONObject> dt = this.foldersToDic (pidRoot);
// 디렉토리를 계층 적 순서로 정렬
psort = this.sortByPid (dt, id, psort);
SqlExec se = 새로운 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, 루트);
} //는 루트 디렉토리-> 루트 디렉토리 추가
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, 루트);
}
psort.add (0, this.root);
return JSONArray.fromObject (psort);
}
public FileInf read (String id) {
SqlExec se = 새로운 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 파일 = 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 ();
반환 파일;
}
public Boolean 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 = 새로운 SqlExec ();
JSONArray arr = se.exec ( "up6_files", sql, "f_id", "");
return arr.size ()> 0;
}
/ **
* 같은 이름의 디렉토리가 있는지 확인
* @param 이름
* @param pid
* @return
* /
public Boolean 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 ();
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 = 새로운 SqlExec ();
JSONArray fid = se.exec ( "up6_files", sql, "f_id", "");
return fid.size ()> 0;
}
public Boolean rename_file_check (문자열 newName, 문자열 pid)
{
SqlExec se = 새로운 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 (문자열 newName, 문자열 pid)
{
SqlExec se = 새로운 SqlExec ();
JSONArray res = se.select ( "up6_folders"
, "f_id"
, 새 SqlParam [] {
new SqlParam ( "f_nameLoc", newName)
, new SqlParam ( "f_pid", pid)
}, "");
return res.size ()> 0;
}
public void rename_file (문자열 이름, 문자열 ID) {
SqlExec se = 새로운 SqlExec ();
se.update ( "up6_files"
, new SqlParam [] {new SqlParam ( "f_nameLoc", name)}
, new SqlParam [] {new SqlParam ( "f_id", id)});
}
public void rename_folder (문자열 이름, 문자열 ID, 문자열 pid) {
SqlExec se = 새로운 SqlExec ();
se.update ( "up6_folders"
, new SqlParam [] {new SqlParam ( "f_nameLoc", name)}
, new SqlParam [] {new SqlParam ( "f_id", id)});
}
}
1. webuploader.js의 약 4880 줄의 코드에서 동적으로 생성 된 입력 구성 요소 아래에 webkitdirectory 속성을 추가합니다 (입력을 직접 검색 할 수도 있음).
function FileUploader (fileLoc, mgr)
{
var _this = this;
this.id = fileLoc.id;
this.ui = {msg : null, 프로세스 : 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
}; // json obj, 서버 파일 정보
this.fileSvr = jQuery.extend (this.fileSvr, fileLoc);
2. 경로를 얻을 수 있습니다
this.open_files = 함수 (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 = 함수 (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 = 함수 (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