/// <summary> /// 获取所有已经上传完的文件列表 /// </summary> /// <param name="fidRoot"></param> /// <param name="files"></param> public static void GetCompletes(int fidRoot, ref JArray files, ref List <string> ids) { StringBuilder sql = new StringBuilder("select "); sql.Append("f_id"); sql.Append(",f_nameLoc"); sql.Append(",f_pathLoc"); sql.Append(",f_lenLoc"); sql.Append(",f_sizeLoc"); sql.Append(",f_md5"); sql.Append(",f_pidRoot"); sql.Append(",f_pid"); sql.Append(",f_lenSvr"); sql.Append(",f_pathSvr"); //fix:服务器会重复创建文件项的问题 sql.Append(",fd.fd_pathRel"); // sql.Append(" from cloud2_files as f"); sql.Append(" left join cloud2_folders as fd"); sql.Append(" on fd.fd_id = f.f_pid"); sql.Append(" where f.f_pidRoot=@f_pidRoot and f.f_complete=1;"); DbHelper db = new DbHelper(); DbCommand cmd = db.GetCommand(sql.ToString()); db.AddInt(ref cmd, "@f_pidRoot", fidRoot); DbDataReader r = db.ExecuteReader(cmd); while (r.Read()) { FileInf fi = new FileInf(); fi.idSvr = r.GetInt32(0); fi.nameLoc = r.GetString(1); fi.pathLoc = r.GetString(2); fi.lenLoc = r.GetInt64(3); fi.sizeLoc = r.GetString(4); fi.md5 = r.IsDBNull(5) ? string.Empty : r.GetString(5); fi.pidRoot = r.GetInt32(6); fi.pidSvr = r.GetInt32(7); fi.lenSvr = r.GetInt64(8); fi.pathSvr = r.IsDBNull(9) ? string.Empty : r.GetString(9); //fix:服务器会重复创建文件项的问题 fi.pathRel = r.GetString(10) + "\\"; //相对路径:root\\child\\folder\\ files.Add((JObject)JToken.FromObject(fi)); //添加到列表 ids.Add(fi.idSvr.ToString()); } r.Close(); }
/// <summary> /// 更新文件夹中子文件信息, /// f_pathSvr /// md5 /// f_id /// </summary> /// <param name="inf"></param> public void UpdateChild(ref FileInf inf) { StringBuilder sb = new StringBuilder(); sb.Append("update cloud2_files set "); sb.Append(" f_pathSvr = @f_pathSvr , "); sb.Append(" f_md5 = @f_md5 "); sb.Append(" where f_id=@f_id "); DbHelper db = new DbHelper(); DbCommand cmd = db.GetCommand(sb.ToString()); db.AddString(ref cmd, "@f_pathSvr", inf.pathSvr, 255); db.AddString(ref cmd, "@f_md5", inf.md5, 40); db.AddInt(ref cmd, "@f_id", inf.idSvr); db.ExecuteNonQuery(cmd); }
/// <summary> /// 根据根文件夹ID获取未上传完成的文件列表,并转换成JSON格式。 /// 说明: /// 1.此函数会自动对文件路径进行转码 /// </summary> /// <param name="fidRoot"></param> /// <returns></returns> static public string GetUnCompletes(int fidRoot) { StringBuilder sql = new StringBuilder("select "); sql.Append("f_nameLoc"); sql.Append(",f_pathLoc"); sql.Append(",f_lenLoc"); sql.Append(",f_sizeLoc"); sql.Append(",f_md5"); sql.Append(",f_pidRoot"); sql.Append(",f_pid"); sql.Append(",f_lenSvr"); sql.Append(",f_pathSvr");//fix:服务器会重复创建文件项的问题 sql.Append(" from cloud2_files where f_pidRoot=@f_pidRoot;"); JArray arrFiles = new JArray(); DbHelper db = new DbHelper(); DbCommand cmd = db.GetCommand(sql.ToString()); db.AddUInt32(ref cmd, "@f_pidRoot", fidRoot); DbDataReader r = db.ExecuteReader(cmd); while (r.Read()) { FileInf fi = new FileInf(); fi.m_nameLoc = r.GetString(0); fi.m_pathLoc = r.GetString(1); fi.m_pathLoc = HttpUtility.UrlEncode(fi.m_pathLoc); fi.m_pathLoc = fi.m_pathLoc.Replace("+", "%20"); fi.m_lenLoc = r.GetInt64(2); fi.m_size = r.GetString(3); fi.m_md5 = r.IsDBNull(4) ? string.Empty : r.GetString(4); fi.m_pidRoot = r.GetInt32(5); fi.pidSvr = r.GetInt32(6); fi.lenSvr = r.GetInt64(8); fi.pathSvr = r.IsDBNull(9) ? string.Empty : r.GetString(9);//fix:服务器会重复创建文件项的问题 arrFiles.Add(JToken.FromObject(fi)); } r.Close(); return(arrFiles.ToString()); }
/// <summary> /// 获取未上传完的文件列表 /// </summary> /// <param name="fidRoot"></param> /// <param name="files"></param> static public void GetUnCompletes(int fidRoot, ref JArray files) { StringBuilder sql = new StringBuilder("select "); sql.Append("f_id"); sql.Append(",f_nameLoc"); sql.Append(",f_pathLoc"); sql.Append(",f_lenLoc"); sql.Append(",f_sizeLoc"); sql.Append(",f_md5"); sql.Append(",f_pidRoot"); sql.Append(",f_pid"); sql.Append(",f_lenSvr"); sql.Append(",f_pathSvr"); sql.Append(" from cloud2_files where f_pidRoot=@f_pidRoot and f_complete=0;"); DbHelper db = new DbHelper(); DbCommand cmd = db.GetCommand(sql.ToString()); db.AddInt(ref cmd, "@f_pidRoot", fidRoot);//fix:AddUInt DbDataReader r = db.ExecuteReader(cmd); while (r.Read()) { FileInf fi = new FileInf(); fi.idSvr = r.GetInt32(0); fi.m_nameLoc = r.GetString(1); fi.pathLoc = r.GetString(2); fi.lenLoc = r.GetInt64(3); fi.sizeLoc = r.GetString(4); fi.md5 = r.IsDBNull(5) ? string.Empty : r.GetString(5); fi.pidRoot = r.GetInt32(6); fi.pidSvr = r.GetInt32(7); fi.lenSvr = r.GetInt64(8); fi.pathSvr = r.IsDBNull(9) ? string.Empty : r.GetString(9);//fix:续传文件夹时,服务器会重复创建文件项的问题。 files.Add((JObject)JToken.FromObject(fi)); } r.Close(); }
protected void Page_Load(object sender, EventArgs e) { string folderStr = Request.Form["folder"]; string uidTxt = Request.Form["uid"]; int uid = int.Parse(uidTxt); if (string.IsNullOrEmpty(folderStr)) { return; } folderStr = HttpUtility.UrlDecode(folderStr); //文件夹ID,文件夹对象 Hashtable tbFolders = new Hashtable(); JArray arrFolders = new JArray(); JArray arrFiles = new JArray(); JObject jsonObj = JObject.Parse(folderStr); FolderInf fdroot = JsonConvert.DeserializeObject <FolderInf>(folderStr); fdroot.pathRel = fdroot.nameLoc; //相对路径 fdroot.m_idSvr = DBFolder.Add(ref fdroot); //添加到数据库 fdroot.idFile = DBFile.Add(ref fdroot); //向文件表添加一条数据 tbFolders.Add(0, fdroot); //提供给子文件夹使用 //解析文件夹 if (jsonObj["folders"] != null) { JArray jar = JArray.Parse(jsonObj["folders"].ToString()); for (int i = 0, l = jar.Count; i < l; ++i) { folderStr = jar[i].ToString();//把每一个元素转化为JObject对象 FolderInf folder = JsonConvert.DeserializeObject <FolderInf>(folderStr); folder.uid = uid; folder.pidRoot = fdroot.idSvr; //查找父级文件夹 FolderInf fdParent = (FolderInf)tbFolders[folder.m_pidLoc]; folder.pathRel = Path.Combine(fdParent.pathRel, folder.nameLoc); folder.m_pidSvr = fdParent.m_idSvr; folder.m_idSvr = DBFolder.Add(ref folder);//添加到数据库 tbFolders.Add(folder.m_idLoc, folder); arrFolders.Add(JToken.FromObject(folder)); } } DBFile db = new DBFile(); xdb_files f_exist = new xdb_files(); //解析文件 if (jsonObj["files"] != null) { JArray jar = JArray.Parse(jsonObj["files"].ToString()); for (int i = 0, l = jar.Count; i < l; ++i) { folderStr = jar[i].ToString();//把每一个元素转化为JObject对象 FileInf fileSvr = JsonConvert.DeserializeObject <FileInf>(folderStr); FolderInf folder = (FolderInf)tbFolders[fileSvr.pidLoc]; fileSvr.uid = uid; fileSvr.pidRoot = fdroot.m_idSvr; fileSvr.pidSvr = folder.idSvr; fileSvr.nameSvr = fileSvr.md5 + Path.GetExtension(fileSvr.pathLoc).ToLower(); //生成文件路径 var pb = new PathCloudBuilder(); fileSvr.pathSvr = pb.genFile(fileSvr.uid, fileSvr.md5, fileSvr.nameLoc); //存在相同文件 if (db.exist_file(fileSvr.md5, ref f_exist)) { fileSvr.lenSvr = f_exist.lenSvr; fileSvr.perSvr = f_exist.perSvr; fileSvr.pathSvr = f_exist.pathSvr; fileSvr.pathRel = f_exist.pathRel; fileSvr.postPos = f_exist.FilePos; fileSvr.complete = f_exist.complete; fileSvr.nameSvr = f_exist.nameSvr; } fileSvr.idSvr = DBFile.Add(ref fileSvr);//将信息添加到数据库 arrFiles.Add(JToken.FromObject(fileSvr)); } } //转换为JSON JObject obj = (JObject)JToken.FromObject(fdroot); obj["folders"] = arrFolders; obj["files"] = arrFiles; obj["complete"] = false; string json = obj.ToString(); json = HttpUtility.UrlEncode(json); //UrlEncode会将空格解析成+号, json = json.Replace("+", "%20"); Response.Write(json); }
protected void Page_Load(object sender, EventArgs e) { string folderStr = Request.Form["folder"]; string uidTxt = Request.Form["uid"]; int uid = int.Parse(uidTxt); if (string.IsNullOrEmpty(folderStr)) { return; } folderStr = HttpUtility.UrlDecode(folderStr); //文件夹ID,文件夹对象 Hashtable tbFolders = new Hashtable(); JObject jsonObj = JObject.Parse(folderStr); FolderInf fdroot = JsonConvert.DeserializeObject <FolderInf>(folderStr); fdroot.pathRel = fdroot.nameLoc;//相对路径 PathUuidBuilder pb = new PathUuidBuilder(); fdroot.pathSvr = pb.genFolder(uid, ref fdroot); if (!Directory.Exists(fdroot.pathSvr)) { Directory.CreateDirectory(fdroot.pathSvr); } fdroot.idSvr = DBFolder.Add(ref fdroot); //添加到数据库 fdroot.idFile = DBFile.Add(ref fdroot); //向文件表添加一条数据 tbFolders.Add(0, fdroot); //提供给子文件夹使用 //解析文件夹 JArray arrFolders = new JArray(); if (jsonObj["folders"] != null) { JArray jar = JArray.Parse(jsonObj["folders"].ToString()); for (int i = 0, l = jar.Count; i < l; ++i) { folderStr = jar[i].ToString();//把每一个元素转化为JObject对象 FolderInf folder = JsonConvert.DeserializeObject <FolderInf>(folderStr); folder.uid = uid; folder.pidRoot = fdroot.idSvr; //创建层级结构 FolderInf fdParent = (FolderInf)tbFolders[folder.m_pidLoc]; folder.pathSvr = Path.Combine(fdParent.pathSvr, folder.nameLoc); folder.pathRel = Path.Combine(fdParent.pathRel, folder.nameLoc); folder.m_pidSvr = fdParent.m_idSvr; folder.m_idSvr = DBFolder.Add(ref folder);//添加到数据库 tbFolders.Add(folder.m_idLoc, folder); arrFolders.Add(JToken.FromObject(folder)); } } //解析文件 JArray arrFiles = new JArray(); if (jsonObj["files"] != null) { JArray jar = JArray.Parse(jsonObj["files"].ToString()); for (int i = 0, l = jar.Count; i < l; ++i) { folderStr = jar[i].ToString();//把每一个元素转化为JObject对象 FileInf file = JsonConvert.DeserializeObject <FileInf>(folderStr); FolderInf pidFd = (FolderInf)tbFolders[file.pidLoc]; file.uid = uid; file.pidRoot = fdroot.m_idSvr; file.pidSvr = pidFd.idSvr; file.nameSvr = file.nameLoc; //以层级结构存储 file.pathSvr = Path.Combine(pidFd.pathSvr, file.nameLoc); file.idSvr = DBFile.Add(ref file);//将信息添加到数据库 arrFiles.Add(JToken.FromObject(file)); } } //转换为JSON JObject obj = (JObject)JToken.FromObject(fdroot); obj["folders"] = arrFolders; obj["files"] = arrFiles; obj["complete"] = false; string json = obj.ToString(); json = HttpUtility.UrlEncode(json); //UrlEncode会将空格解析成+号, json = json.Replace("+", "%20"); Response.Write(json); }
/// <summary> /// 添加一条文件信息,一船提供给ajax_fd_create.aspx使用。 /// </summary> /// <param name="inf"></param> /// <returns></returns> static public int Add(ref FileInf inf) { StringBuilder sb = new StringBuilder(); sb.Append("insert into cloud2_files("); sb.Append("f_pid"); sb.Append(",f_pidRoot"); sb.Append(",f_fdChild"); sb.Append(",f_uid"); sb.Append(",f_nameLoc"); sb.Append(",f_nameSvr"); sb.Append(",f_pathLoc"); sb.Append(",f_pathSvr"); sb.Append(",f_md5"); sb.Append(",f_lenLoc"); sb.Append(",f_lenSvr"); sb.Append(",f_perSvr"); sb.Append(",f_sizeLoc"); sb.Append(",f_complete"); sb.Append(") values("); sb.Append("@f_pid"); sb.Append(",@f_pidRoot"); sb.Append(",@f_fdChild"); sb.Append(",@f_uid"); sb.Append(",@f_nameLoc"); sb.Append(",@f_nameSvr"); sb.Append(",@f_pathLoc"); sb.Append(",@f_pathSvr"); sb.Append(",@f_md5"); sb.Append(",@f_lenLoc"); sb.Append(",@f_lenSvr"); sb.Append(",@f_perSvr"); sb.Append(",@f_sizeLoc"); sb.Append(",@f_complete"); sb.Append(");"); //获取插入后的ID sb.Append("select @@IDENTITY;"); DbHelper db = new DbHelper(); DbCommand cmd = db.GetCommand(sb.ToString()); db.AddInt(ref cmd, "@f_pid", inf.pidSvr); db.AddInt(ref cmd, "@f_pidRoot", inf.pidRoot); db.AddInBool(cmd, "@f_fdChild", true); db.AddInt(ref cmd, "@f_uid", inf.uid); db.AddString(ref cmd, "@f_nameLoc", inf.nameLoc, 255); db.AddString(ref cmd, "@f_nameSvr", inf.nameSvr, 255); db.AddString(ref cmd, "@f_pathLoc", inf.pathLoc, 255); db.AddString(ref cmd, "@f_pathSvr", inf.pathSvr, 255); db.AddString(ref cmd, "@f_md5", inf.md5, 40); db.AddInt64(ref cmd, "@f_lenLoc", inf.lenLoc); db.AddInt64(ref cmd, "@f_lenSvr", inf.lenSvr); db.AddString(ref cmd, "@f_perSvr", inf.perSvr, 6); db.AddString(ref cmd, "@f_sizeLoc", inf.sizeLoc, 10); db.AddBool(ref cmd, "@f_complete", inf.complete); object f_id = db.ExecuteScalar(cmd); //cmd.Parameters.Clear(); //cmd.CommandText = "select top 1 f_id from cloud2_files order by f_id desc"; //object f_id = db.ExecuteScalar(cmd); return(Convert.ToInt32(f_id)); }