フォルダーデータベース処理ロジック
パブリッククラス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