ResourceFileController.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. using LeaRun.Application.Busines.PublicInfoManage;
  2. using LeaRun.Application.Code;
  3. using LeaRun.Application.Entity.PublicInfoManage;
  4. using LeaRun.Util;
  5. using LeaRun.Util.WebControl;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Threading;
  11. using System.Web;
  12. using System.Web.Mvc;
  13. namespace LeaRun.Application.Web.Areas.PublicInfoManage.Controllers
  14. {
  15. /// <summary>
  16. /// 版 本 6.1
  17. /// Copyright (c) 2013-2016 上海力软信息技术有限公司
  18. /// 创建人:佘赐雄
  19. /// 日 期:2015.12.15 10:56
  20. /// 描 述:文件管理
  21. /// </summary>
  22. public class ResourceFileController : MvcControllerBase
  23. {
  24. private FileFolderBLL fileFolderBLL = new FileFolderBLL();
  25. private FileInfoBLL fileInfoBLL = new FileInfoBLL();
  26. #region 视图功能
  27. /// <summary>
  28. /// 文件管理
  29. /// </summary>
  30. /// <returns></returns>
  31. [HttpGet]
  32. [HandlerAuthorize(PermissionMode.Enforce)]
  33. public ActionResult Index()
  34. {
  35. return View();
  36. }
  37. /// <summary>
  38. /// 上传文件
  39. /// </summary>
  40. /// <returns></returns>
  41. [HttpGet]
  42. [HandlerAuthorize(PermissionMode.Enforce)]
  43. public ActionResult UploadifyForm()
  44. {
  45. return View();
  46. }
  47. /// <summary>
  48. /// 文件夹表单
  49. /// </summary>
  50. /// <returns></returns>
  51. [HttpGet]
  52. [HandlerAuthorize(PermissionMode.Enforce)]
  53. public ActionResult FolderForm()
  54. {
  55. return View();
  56. }
  57. /// <summary>
  58. /// 文件表单
  59. /// </summary>
  60. /// <returns></returns>
  61. [HttpGet]
  62. [HandlerAuthorize(PermissionMode.Enforce)]
  63. public ActionResult FileForm()
  64. {
  65. return View();
  66. }
  67. /// <summary>
  68. /// 文件(夹)移动表单
  69. /// </summary>
  70. /// <returns></returns>
  71. [HttpGet]
  72. [HandlerAuthorize(PermissionMode.Enforce)]
  73. public ActionResult MoveForm()
  74. {
  75. return View();
  76. }
  77. #endregion
  78. #region 获取数据
  79. /// <summary>
  80. /// 文件夹列表
  81. /// </summary>
  82. /// <returns>返回树形Json</returns>
  83. [HttpGet]
  84. public ActionResult GetTreeJson()
  85. {
  86. string userId = OperatorProvider.Provider.Current().UserId;
  87. var data = fileFolderBLL.GetList(userId);
  88. var treeList = new List<TreeEntity>();
  89. foreach (FileFolderEntity item in data)
  90. {
  91. TreeEntity tree = new TreeEntity();
  92. bool hasChildren = data.Count(t => t.ParentId == item.FolderId) == 0 ? false : true;
  93. tree.id = item.FolderId;
  94. tree.text = item.FolderName;
  95. tree.value = item.FolderId;
  96. tree.parentId = item.ParentId;
  97. tree.isexpand = true;
  98. tree.complete = true;
  99. tree.hasChildren = hasChildren;
  100. if (hasChildren == false)
  101. {
  102. tree.img = "fa fa-folder";
  103. }
  104. treeList.Add(tree);
  105. }
  106. return Content(treeList.TreeToJson());
  107. }
  108. /// <summary>
  109. /// 所有文件(夹)列表
  110. /// </summary>
  111. /// <param name="folderId">文件夹Id</param>
  112. /// <returns>返回列表Json</returns>
  113. [HttpGet]
  114. public ActionResult GetListJson(string folderId)
  115. {
  116. string userId = OperatorProvider.Provider.Current().UserId;
  117. var data = fileInfoBLL.GetList(folderId, userId);
  118. return ToJsonResult(data);
  119. }
  120. /// <summary>
  121. /// 文档列表
  122. /// </summary>
  123. /// <returns>返回列表Json</returns>
  124. [HttpGet]
  125. public ActionResult GetDocumentListJson()
  126. {
  127. string userId = OperatorProvider.Provider.Current().UserId;
  128. var data = fileInfoBLL.GetDocumentList(userId);
  129. return ToJsonResult(data);
  130. }
  131. /// <summary>
  132. /// 图片列表
  133. /// </summary>
  134. /// <returns>返回列表Json</returns>
  135. [HttpGet]
  136. public ActionResult GetImageListJson()
  137. {
  138. string userId = OperatorProvider.Provider.Current().UserId;
  139. var data = fileInfoBLL.GetImageList(userId);
  140. return ToJsonResult(data);
  141. }
  142. /// <summary>
  143. /// 回收站文件(夹)列表
  144. /// </summary>
  145. /// <returns>返回列表Json</returns>
  146. [HttpGet]
  147. public ActionResult GetRecycledListJson()
  148. {
  149. string userId = OperatorProvider.Provider.Current().UserId;
  150. var data = fileInfoBLL.GetRecycledList(userId);
  151. return ToJsonResult(data);
  152. }
  153. /// <summary>
  154. /// 我的文件(夹)共享列表
  155. /// </summary>
  156. /// <returns>返回列表Json</returns>
  157. [HttpGet]
  158. public ActionResult GetMyShareListJson()
  159. {
  160. string userId = OperatorProvider.Provider.Current().UserId;
  161. var data = fileInfoBLL.GetMyShareList(userId);
  162. return ToJsonResult(data);
  163. }
  164. /// <summary>
  165. /// 他人文件(夹)共享列表
  166. /// </summary>
  167. /// <returns>返回列表Json</returns>
  168. [HttpGet]
  169. public ActionResult GetOthersShareListJson()
  170. {
  171. string userId = OperatorProvider.Provider.Current().UserId;
  172. var data = fileInfoBLL.GetOthersShareList(userId);
  173. return ToJsonResult(data);
  174. }
  175. /// <summary>
  176. /// 文件夹实体
  177. /// </summary>
  178. /// <param name="keyValue">主键值</param>
  179. /// <returns>返回对象Json</returns>
  180. [HttpGet]
  181. public ActionResult GetFolderFormJson(string keyValue)
  182. {
  183. var data = fileFolderBLL.GetEntity(keyValue);
  184. return ToJsonResult(data);
  185. }
  186. /// <summary>
  187. /// 文件实体
  188. /// </summary>
  189. /// <param name="keyValue">主键值</param>
  190. /// <returns>返回对象Json</returns>
  191. [HttpGet]
  192. public ActionResult GetFileFormJson(string keyValue)
  193. {
  194. var data = fileInfoBLL.GetEntity(keyValue);
  195. return ToJsonResult(data);
  196. }
  197. #endregion
  198. #region 提交数据
  199. /// <summary>
  200. /// 还原文件(夹)
  201. /// </summary>
  202. /// <param name="keyValue">主键值</param>
  203. /// <param name="fileType">文件类型</param>
  204. /// <returns></returns>
  205. [HttpPost]
  206. [ValidateAntiForgeryToken]
  207. [AjaxOnly]
  208. [HandlerAuthorize(PermissionMode.Enforce)]
  209. public ActionResult RestoreFile(string keyValue, string fileType)
  210. {
  211. if (fileType == "folder")
  212. {
  213. fileFolderBLL.RestoreFile(keyValue);
  214. }
  215. else
  216. {
  217. fileInfoBLL.RestoreFile(keyValue);
  218. }
  219. return Success("还原成功。");
  220. }
  221. /// <summary>
  222. /// 删除文件(夹)
  223. /// </summary>
  224. /// <param name="keyValue">主键值</param>
  225. /// <param name="fileType">文件类型</param>
  226. /// <returns></returns>
  227. [HttpPost]
  228. [ValidateAntiForgeryToken]
  229. [AjaxOnly]
  230. [HandlerAuthorize(PermissionMode.Enforce)]
  231. public ActionResult RemoveForm(string keyValue, string fileType)
  232. {
  233. if (fileType == "folder")
  234. {
  235. fileFolderBLL.RemoveForm(keyValue);
  236. }
  237. else
  238. {
  239. fileInfoBLL.RemoveForm(keyValue);
  240. }
  241. return Success("删除成功。");
  242. }
  243. /// <summary>
  244. /// 彻底删除文件(夹)
  245. /// </summary>
  246. /// <param name="keyValue">主键值</param>
  247. /// <param name="fileType">文件类型</param>
  248. /// <returns></returns>
  249. [HttpPost]
  250. [ValidateAntiForgeryToken]
  251. [AjaxOnly]
  252. [HandlerAuthorize(PermissionMode.Enforce)]
  253. public ActionResult ThoroughRemoveForm(string keyValue, string fileType)
  254. {
  255. if (fileType == "folder")
  256. {
  257. fileFolderBLL.ThoroughRemoveForm(keyValue);
  258. }
  259. else
  260. {
  261. fileInfoBLL.ThoroughRemoveForm(keyValue);
  262. }
  263. return Success("删除成功。");
  264. }
  265. /// <summary>
  266. /// 保存文件夹表单(新增、修改)
  267. /// </summary>
  268. /// <param name="keyValue">主键值</param>
  269. /// <param name="fileFolderEntity">文件夹实体</param>
  270. /// <returns></returns>
  271. [HttpPost]
  272. [ValidateAntiForgeryToken]
  273. [AjaxOnly]
  274. public ActionResult SaveFolderForm(string keyValue, FileFolderEntity fileFolderEntity)
  275. {
  276. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  277. return Success("操作成功。");
  278. }
  279. /// <summary>
  280. /// 保存文件表单(新增、修改)
  281. /// </summary>
  282. /// <param name="keyValue">主键值</param>
  283. /// <param name="fileInfoEntity">文件实体</param>
  284. /// <returns></returns>
  285. [HttpPost]
  286. [ValidateAntiForgeryToken]
  287. [AjaxOnly]
  288. public ActionResult SaveFileForm(string keyValue, FileInfoEntity fileInfoEntity)
  289. {
  290. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  291. return Success("操作成功。");
  292. }
  293. /// <summary>
  294. /// 保存文件(夹)移动位置
  295. /// </summary>
  296. /// <param name="keyValue">主键值</param>
  297. /// <param name="moveFolderId">要移动文件夹Id</param>
  298. /// <param name="FileType">文件类型</param>
  299. /// <returns></returns>
  300. [HttpPost]
  301. [ValidateAntiForgeryToken]
  302. [AjaxOnly]
  303. public ActionResult SaveMoveForm(string keyValue, string moveFolderId, string fileType)
  304. {
  305. if (fileType == "folder")
  306. {
  307. FileFolderEntity fileFolderEntity = new FileFolderEntity();
  308. fileFolderEntity.FolderId = keyValue;
  309. fileFolderEntity.ParentId = moveFolderId;
  310. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  311. }
  312. else
  313. {
  314. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  315. fileInfoEntity.FileId = keyValue;
  316. fileInfoEntity.FolderId = moveFolderId;
  317. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  318. }
  319. return Success("操作成功。");
  320. }
  321. /// <summary>
  322. /// 共享文件(夹)
  323. /// </summary>
  324. /// <param name="keyValue">主键值</param>
  325. /// <param name="fileType">文件类型</param>
  326. /// <param name="IsShare">是否共享:1-共享 0取消共享</param>
  327. /// <returns></returns>
  328. [HttpPost]
  329. [ValidateAntiForgeryToken]
  330. [AjaxOnly]
  331. [HandlerAuthorize(PermissionMode.Enforce)]
  332. public ActionResult ShareFile(string keyValue, int IsShare, string fileType)
  333. {
  334. if (fileType == "folder")
  335. {
  336. fileFolderBLL.ShareFolder(keyValue, IsShare);
  337. }
  338. else
  339. {
  340. fileInfoBLL.ShareFile(keyValue, IsShare);
  341. }
  342. return Success("共享成功。");
  343. }
  344. /// <summary>
  345. /// 上传文件
  346. /// </summary>
  347. /// <param name="folderId">文件夹Id</param>
  348. /// <param name="userId">用户Id</param>
  349. /// <param name="Filedata">文件对象</param>
  350. /// <returns></returns>
  351. [HttpPost]
  352. public ActionResult UploadifyFile(string folderId, HttpPostedFileBase Filedata)
  353. {
  354. try
  355. {
  356. Thread.Sleep(500);////延迟500毫秒
  357. //没有文件上传,直接返回
  358. if (Filedata == null || string.IsNullOrEmpty(Filedata.FileName) || Filedata.ContentLength == 0)
  359. {
  360. return HttpNotFound();
  361. }
  362. //获取文件完整文件名(包含绝对路径)
  363. //文件存放路径格式:/Resource/ResourceFile/{userId}{data}/{guid}.{后缀名}
  364. string userId = OperatorProvider.Provider.Current().UserId;
  365. string fileGuid = Guid.NewGuid().ToString();
  366. long filesize = Filedata.ContentLength;
  367. string FileEextension = Path.GetExtension(Filedata.FileName);
  368. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  369. string virtualPath = string.Format("~/Resource/DocumentFile/{0}/{1}/{2}{3}", userId, uploadDate, fileGuid, FileEextension);
  370. string fullFileName = this.Server.MapPath(virtualPath);
  371. //创建文件夹
  372. string path = Path.GetDirectoryName(fullFileName);
  373. Directory.CreateDirectory(path);
  374. if (!System.IO.File.Exists(fullFileName))
  375. {
  376. //保存文件
  377. Filedata.SaveAs(fullFileName);
  378. //文件信息写入数据库
  379. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  380. fileInfoEntity.Create();
  381. fileInfoEntity.FileId = fileGuid;
  382. if (!string.IsNullOrEmpty(folderId))
  383. {
  384. fileInfoEntity.FolderId = folderId;
  385. }
  386. else
  387. {
  388. fileInfoEntity.FolderId = "0";
  389. }
  390. fileInfoEntity.FileName = Filedata.FileName;
  391. fileInfoEntity.FilePath = virtualPath;
  392. fileInfoEntity.FileSize = filesize.ToString();
  393. fileInfoEntity.FileExtensions = FileEextension;
  394. fileInfoEntity.FileType = FileEextension.Replace(".", "");
  395. fileInfoBLL.SaveForm("", fileInfoEntity);
  396. }
  397. return Success("上传成功。");
  398. }
  399. catch (Exception ex)
  400. {
  401. return Content(ex.Message);
  402. }
  403. }
  404. /// <summary>
  405. /// 下载文件
  406. /// </summary>
  407. /// <param name="KeyValue">主键</param>
  408. /// <returns></returns>
  409. [HttpPost]
  410. [HandlerAuthorize(PermissionMode.Enforce)]
  411. public void DownloadFile(string keyValue)
  412. {
  413. var data = fileInfoBLL.GetEntity(keyValue);
  414. string filename = Server.UrlDecode(data.FileName);//返回客户端文件名称
  415. string filepath = this.Server.MapPath(data.FilePath);
  416. if (FileDownHelper.FileExists(filepath))
  417. {
  418. FileDownHelper.DownLoadold(filepath, filename);
  419. }
  420. }
  421. #endregion
  422. }
  423. }