FlodersAndFilesController.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using MiniWebApi.Handler;
  2. using MiniWebApi.Network;
  3. using Newtonsoft.Json;
  4. using SQLite;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Net.Http;
  11. using System.Text;
  12. using System.Text.RegularExpressions;
  13. using Vinno.IUS.Common.Log;
  14. using Vinno.vCloud.Disk.Database;
  15. using Vinno.vCloud.Disk.Database.Dto;
  16. using Vinno.vCloud.Disk.Language;
  17. using Vinno.vCloud.Disk.UFile;
  18. using Vinno.vCloud.Common.Storage.ObjectStorageInfo.Authorization;
  19. using Vinno.vCloud.Protocol.Infrastructures.Storage;
  20. using Vinno.vCloud.Disk.Tencent;
  21. namespace Vinno.vCloud.Disk.Controllers
  22. {
  23. [WebApiHandler("FoldersAndFiles")]
  24. internal class FoldersAndFilesController : BaseHandler
  25. {
  26. /// <summary>
  27. /// 根据Id查询文件夹和文件
  28. /// </summary>
  29. /// <param name="context"></param>
  30. [Post]
  31. public void GetKeyValues(WebApiHttpContext context)
  32. {
  33. var param = context.GetParams();
  34. var breadcrumbList = param.GetStringValue("breadcrumbList");
  35. if (Regex.IsMatch(breadcrumbList, "^[0-9,]+$") && !string.IsNullOrWhiteSpace(breadcrumbList))
  36. {
  37. var select = SqlExecute.DB.Query<FoldersAndFiles>($"select * from FoldersAndFiles where id in({breadcrumbList})");
  38. var result = select.OrderBy(f=>f.Id).ToList();
  39. result.Insert(0,new FoldersAndFiles { FatherId = -1, FileUrl = string.Empty, Id = 0, Name = WebTranslateHelper.Translate("Root"), Type = 1 });
  40. var data = result.Select(f => new { f.Id, f.Name });
  41. context.Response.Json(data, true);
  42. }
  43. }
  44. /// <summary>
  45. /// 获取文件夹和文件列表
  46. /// </summary>
  47. /// <param name="context"></param>
  48. [Get]
  49. public void GetFoldersAndFiles(WebApiHttpContext context)
  50. {
  51. var page = context.GetParam("page").ToInt();
  52. var limit = context.GetParam("limit").ToInt();
  53. var data = SqlExecute.DB.Table<FoldersAndFiles>().OrderByDescending(f => f.Id);
  54. var dtos = data.ToList();
  55. dtos.ForEach(f => f.CreateTime = f.CreateTime.ToLocalTime());
  56. var result = new
  57. {
  58. code = 0,
  59. msg = "",
  60. count = dtos.Count(),
  61. data = dtos.Skip((page - 1) * limit).Take(limit)
  62. };
  63. context.Response.Json(result, true);
  64. }
  65. /// <summary>
  66. /// 根据父级Id获取文件夹和文件
  67. /// </summary>
  68. /// <param name="context"></param>
  69. [Get]
  70. public void GetFoldersAndFilesByFatherId(WebApiHttpContext context)
  71. {
  72. var fatherId = context.GetParam("fatherId").ToInt();
  73. var data = SqlExecute.DB.Table<FoldersAndFiles>().Where(f=>f.FatherId == fatherId);
  74. var result = data.ToList();
  75. result.ForEach(f => f.CreateTime = f.CreateTime.ToLocalTime());
  76. context.Response.Json(result, true);
  77. }
  78. /// <summary>
  79. /// 添加文件夹和文件
  80. /// </summary>
  81. /// <param name="context"></param>
  82. [Post]
  83. public void AddFoldersAndFiles(WebApiHttpContext context)
  84. {
  85. var param = context.GetParams();
  86. var name = param.GetStringValue("name");
  87. var fileUrl = param.GetStringValue("fileUrl");
  88. var fatherId = param.GetStringValue("fatherId").ToInt();
  89. var password = param.GetStringValue("password");
  90. var currUser = param.GetStringValue("currUser");
  91. var type = param.GetStringValue("type").ToInt();
  92. if (string.IsNullOrWhiteSpace(name))
  93. {
  94. context.Response.Json(new
  95. {
  96. Success = false,
  97. Msg = WebTranslateHelper.Translate("ParamsError")+":[name]"
  98. }, true);
  99. return;
  100. }
  101. var repeatingData = SqlExecute.DB.Query(SqlExecute.DB.GetMapping<FoldersAndFiles>(), "select * from FoldersAndFiles where Name=? and Type=? and FatherId=?", name, type, fatherId);
  102. if (repeatingData.Count > 0)
  103. {
  104. context.Response.Json(new
  105. {
  106. Success = false,
  107. Msg = WebTranslateHelper.Translate("Repeating") + $":[{name}]"
  108. }, true);
  109. return;
  110. }
  111. FoldersAndFiles foldersAndFiles = new FoldersAndFiles();
  112. foldersAndFiles.Name = name;
  113. foldersAndFiles.Password = password;
  114. foldersAndFiles.Type = type;
  115. foldersAndFiles.FileUrl = fileUrl;
  116. foldersAndFiles.FatherId = fatherId;
  117. foldersAndFiles.FileMd5 = string.Empty;
  118. foldersAndFiles.Creater = currUser;
  119. foldersAndFiles.CreateTime = DateTime.UtcNow;
  120. var isSuccess = SqlExecute.DB.Insert(foldersAndFiles)>0;
  121. context.Response.Json(new
  122. {
  123. Success = isSuccess,
  124. Msg = string.Empty
  125. }, true);
  126. }
  127. /// <summary>
  128. /// 获取文件夹和文件信息
  129. /// </summary>
  130. /// <param name="context"></param>
  131. [Get]
  132. public void GetFoldersAndFilesById(WebApiHttpContext context)
  133. {
  134. var id = context.GetParam("id");
  135. var ffInfo = SqlExecute.DB.FindWithQuery<FoldersAndFiles>("select * from FoldersAndFiles where Id=?", id.ToInt());
  136. if (ffInfo != null)
  137. {
  138. ffInfo.CreateTime = ffInfo.CreateTime.ToLocalTime();
  139. context.Response.Json(ffInfo, true);
  140. }
  141. }
  142. /// <summary>
  143. /// 编辑文件夹和文件
  144. /// </summary>
  145. /// <param name="context"></param>
  146. [Post]
  147. public void EditFoldersAndFiles(WebApiHttpContext context)
  148. {
  149. var param = context.GetParams();
  150. var id = param.GetStringValue("id").ToInt();
  151. var name = param.GetStringValue("name");
  152. var fileUrl = param.GetStringValue("fileUrl");
  153. var fatherId = param.GetStringValue("fatherId").ToInt();
  154. var password = param.GetStringValue("password");
  155. var currUser = param.GetStringValue("currUser");
  156. var type = param.GetStringValue("type").ToInt();
  157. if (id==0 || string.IsNullOrWhiteSpace(name))
  158. {
  159. context.Response.Json(new
  160. {
  161. Success = false,
  162. Msg = WebTranslateHelper.Translate("ParamsError") + ":[name]"
  163. }, true);
  164. return;
  165. }
  166. var foldersAndFiles = SqlExecute.DB.Get<FoldersAndFiles>(id);
  167. foldersAndFiles.Id = id;
  168. foldersAndFiles.Name = name;
  169. foldersAndFiles.Password = password;
  170. foldersAndFiles.Type = type;
  171. foldersAndFiles.FileUrl = fileUrl;
  172. foldersAndFiles.FatherId = fatherId;
  173. foldersAndFiles.Creater = currUser;
  174. foldersAndFiles.CreateTime = DateTime.UtcNow;
  175. var isSuccess = SqlExecute.DB.Update(foldersAndFiles) > 0;
  176. context.Response.Json(new
  177. {
  178. Success = isSuccess,
  179. Msg = string.Empty
  180. }, true);
  181. }
  182. /// <summary>
  183. /// 删除文件夹和文件
  184. /// </summary>
  185. /// <param name="context"></param>
  186. [Get]
  187. public void DeleteFoldersAndFiles(WebApiHttpContext context)
  188. {
  189. var id = context.GetParam("id");
  190. if (string.IsNullOrWhiteSpace(id))
  191. {
  192. context.Response.Json(new
  193. {
  194. Success = false,
  195. Msg = WebTranslateHelper.Translate("ParamsError") + ":[id]"
  196. }, true);
  197. return;
  198. }
  199. var key = id.ToInt();
  200. var ffRef = SqlExecute.DB.Find<FoldersAndFiles>(f => f.Id == key);
  201. var isSuccess = false;
  202. var msg = string.Empty;
  203. if (ffRef!=null && !string.IsNullOrWhiteSpace(ffRef.Name))
  204. {
  205. try
  206. {
  207. var repeatingData = SqlExecute.DB.Query(SqlExecute.DB.GetMapping<FoldersAndFiles>(), "select * from FoldersAndFiles where Name=? and Type=? and FatherId=?", ffRef.Name, 0, ffRef.FatherId);
  208. if (repeatingData.Count == 1)
  209. {
  210. CosUploadHelper.DeleteFile(ffRef.FileUrl);
  211. }
  212. var result = SqlExecute.DB.Delete(id, SqlExecute.DB.GetMapping<FoldersAndFiles>());
  213. isSuccess = result > 0;
  214. }
  215. catch (Exception ex)
  216. {
  217. Logger.WriteLineError($"{ex}");
  218. msg = WebTranslateHelper.Translate("DeleteError");
  219. }
  220. }
  221. context.Response.Json(new
  222. {
  223. Success = isSuccess,
  224. Msg = msg
  225. }, true);
  226. }
  227. }
  228. }