You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ResourceFileController.cs 21 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. using Learun.Application.Base.SystemModule;
  2. using Learun.Application.OA.File.FileFolder;
  3. using Learun.Application.OA.File.FileInfo;
  4. using Learun.Application.OA.File.FilePreview;
  5. using Learun.Util;
  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. using Quanjiang.DigitalSchool.AsposeHelper;
  14. namespace Learun.Application.Web.Areas.LR_OAModule.Controllers
  15. {
  16. /// <summary>
  17. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  18. /// Copyright (c) 2013-2017
  19. /// 创建人:陈彬彬
  20. /// 日 期:2018.06.19
  21. /// 描 述:文件管理
  22. /// </summary>
  23. public class ResourceFileController : MvcControllerBase
  24. {
  25. private FileFolderIBLL fileFolderBLL = new FileFolderBLL();
  26. private FileInfoIBLL fileInfoBLL = new FileInfoBLL();
  27. private FilePreviewIBLL filePreviewIBLL = new FilePreviewBLL();
  28. private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
  29. #region 视图功能
  30. /// <summary>
  31. /// 文件管理
  32. /// </summary>
  33. /// <returns></returns>
  34. [HttpGet]
  35. public ActionResult Index()
  36. {
  37. return View();
  38. }
  39. /// <summary>
  40. /// 文件管理
  41. /// </summary>
  42. /// <returns></returns>
  43. [HttpGet]
  44. public ActionResult BcIndex()
  45. {
  46. return View();
  47. }
  48. /// <summary>
  49. /// 上传文件
  50. /// </summary>
  51. /// <returns></returns>
  52. [HttpGet]
  53. public ActionResult UploadifyForm()
  54. {
  55. return View();
  56. }
  57. /// <summary>
  58. /// 文件夹表单
  59. /// </summary>
  60. /// <returns></returns>
  61. [HttpGet]
  62. public ActionResult FolderForm()
  63. {
  64. return View();
  65. }
  66. /// <summary>
  67. /// 文件表单
  68. /// </summary>
  69. /// <returns></returns>
  70. [HttpGet]
  71. public ActionResult FileForm()
  72. {
  73. return View();
  74. }
  75. /// <summary>
  76. /// 文件(夹)移动表单
  77. /// </summary>
  78. /// <returns></returns>
  79. [HttpGet]
  80. public ActionResult MoveForm()
  81. {
  82. return View();
  83. }
  84. /// <summary>
  85. /// 云盘文件统计
  86. /// </summary>
  87. /// <returns></returns>
  88. [HttpGet]
  89. public ActionResult FileStatistic()
  90. {
  91. return View();
  92. }
  93. #endregion
  94. #region 获取数据
  95. /// <summary>
  96. /// 文件夹列表
  97. /// </summary>
  98. /// <returns>返回树形Json</returns>
  99. [HttpGet]
  100. public ActionResult GetTreeJson()
  101. {
  102. string userId = LoginUserInfo.Get().userId;
  103. var data = fileFolderBLL.GetList(userId);
  104. var treeList = new List<TreeModel>();
  105. foreach (FileFolderEntity item in data)
  106. {
  107. TreeModel tree = new TreeModel();
  108. bool hasChildren = data.Count(t => t.F_ParentId == item.F_FolderId) == 0 ? false : true;
  109. tree.id = item.F_FolderId;
  110. tree.text = item.F_FolderName;
  111. tree.value = item.F_FolderId;
  112. tree.parentId = item.F_ParentId;
  113. tree.isexpand = true;
  114. tree.complete = true;
  115. tree.hasChildren = hasChildren;
  116. if (hasChildren == false)
  117. {
  118. tree.icon = "fa fa-folder";
  119. }
  120. treeList.Add(tree);
  121. }
  122. return JsonResult(treeList);
  123. }
  124. /// <summary>
  125. /// 所有文件(夹)列表
  126. /// </summary>
  127. /// <param name="folderId">文件夹Id</param>
  128. /// <returns>返回列表Json</returns>
  129. [HttpGet]
  130. public ActionResult GetListJson(string folderId, string keyword)
  131. {
  132. string userId = LoginUserInfo.Get().userId;
  133. var data = fileInfoBLL.GetList(folderId, userId);
  134. return JsonResult(data);
  135. }
  136. /// <summary>
  137. /// 获取页面显示列表数据
  138. /// </summary>
  139. /// <param name="pagination">分页参数</param>
  140. /// <param name="queryJson">查询参数</param>
  141. /// <returns></returns>
  142. [HttpGet]
  143. [AjaxOnly]
  144. public ActionResult GetPageList(string folderId, string queryJson)
  145. {
  146. string userId = LoginUserInfo.Get().userId;
  147. var data = fileInfoBLL.GetList(folderId, userId, queryJson);
  148. return JsonResult(data);
  149. }
  150. /// <summary>
  151. /// 文档列表
  152. /// </summary>
  153. /// <returns>返回列表Json</returns>
  154. [HttpGet]
  155. public ActionResult GetDocumentListJson(string queryJson)
  156. {
  157. string userId = LoginUserInfo.Get().userId;
  158. var data = fileInfoBLL.GetDocumentList(userId, queryJson);
  159. return JsonResult(data);
  160. }
  161. /// <summary>
  162. /// 图片列表
  163. /// </summary>
  164. /// <returns>返回列表Json</returns>
  165. [HttpGet]
  166. public ActionResult GetImageListJson(string queryJson)
  167. {
  168. string userId = LoginUserInfo.Get().userId;
  169. var data = fileInfoBLL.GetImageList(userId, queryJson);
  170. return JsonResult(data);
  171. }
  172. /// <summary>
  173. /// 回收站文件(夹)列表
  174. /// </summary>
  175. /// <returns>返回列表Json</returns>
  176. [HttpGet]
  177. public ActionResult GetRecycledListJson()
  178. {
  179. string userId = LoginUserInfo.Get().userId;
  180. var data = fileInfoBLL.GetRecycledList(userId);
  181. return JsonResult(data);
  182. }
  183. /// <summary>
  184. /// 我的文件(夹)共享列表
  185. /// </summary>
  186. /// <returns>返回列表Json</returns>
  187. [HttpGet]
  188. public ActionResult GetMyShareListJson(string queryJson)
  189. {
  190. string userId = LoginUserInfo.Get().userId;
  191. var data = fileInfoBLL.GetMyShareList(userId, queryJson);
  192. return JsonResult(data);
  193. }
  194. /// <summary>
  195. /// 他人文件(夹)共享列表
  196. /// </summary>
  197. /// <returns>返回列表Json</returns>
  198. [HttpGet]
  199. public ActionResult GetOthersShareListJson(string queryJson)
  200. {
  201. string userId = LoginUserInfo.Get().userId;
  202. var data = fileInfoBLL.GetOthersShareList(userId, queryJson);
  203. return JsonResult(data);
  204. }
  205. /// <summary>
  206. /// 文件夹实体
  207. /// </summary>
  208. /// <param name="keyValue">主键值</param>
  209. /// <returns>返回对象Json</returns>
  210. [HttpGet]
  211. public ActionResult GetFolderFormJson(string keyValue)
  212. {
  213. var data = fileFolderBLL.GetEntity(keyValue);
  214. return JsonResult(data);
  215. }
  216. /// <summary>
  217. /// 文件实体
  218. /// </summary>
  219. /// <param name="keyValue">主键值</param>
  220. /// <returns>返回对象Json</returns>
  221. [HttpGet]
  222. public ActionResult GetFileFormJson(string keyValue)
  223. {
  224. var data = fileInfoBLL.GetEntity(keyValue);
  225. return JsonResult(data);
  226. }
  227. /// <summary>
  228. /// 获取云盘文件统计数据
  229. /// </summary>
  230. /// <param name="queryJson"></param>
  231. /// <returns></returns>
  232. public ActionResult GetFileStatisitcData(string queryJson)
  233. {
  234. var data = fileInfoBLL.GetListByJson(queryJson);
  235. var dataGroup = data.Where(x => x.F_CreateDate.HasValue).GroupBy(x => x.F_CreateDate.Value.Month).Select(x => new TempClass()
  236. {
  237. month = x.Key,
  238. count = x.Select(y => y.F_FileId).Count()
  239. });
  240. var xAxis = new List<string>();
  241. var seriesData = new List<int>();
  242. for (int i = 0; i < 12; i++)
  243. {
  244. xAxis.Add(string.Format("{0}月", i + 1));
  245. var aa = dataGroup.FirstOrDefault(x => x.month == (i + 1));
  246. seriesData.Add(aa == null ? 0 : aa.count);
  247. }
  248. var jsonData = new
  249. {
  250. seriesData = seriesData,
  251. xAxis = xAxis
  252. };
  253. return Success(jsonData);
  254. }
  255. public class TempClass
  256. {
  257. public int month { get; set; }
  258. public int count { get; set; }
  259. }
  260. #endregion
  261. #region 提交数据
  262. /// <summary>
  263. /// 还原文件(夹)
  264. /// </summary>
  265. /// <param name="keyValue">主键值</param>
  266. /// <param name="fileType">文件类型</param>
  267. /// <returns></returns>
  268. [HttpPost]
  269. [AjaxOnly]
  270. public ActionResult RestoreFile(string keyValue, string fileType)
  271. {
  272. if (fileType == "folder")
  273. {
  274. fileFolderBLL.RestoreFile(keyValue);
  275. }
  276. else
  277. {
  278. fileInfoBLL.RestoreFile(keyValue);
  279. }
  280. return Success("还原成功。");
  281. }
  282. /// <summary>
  283. /// 删除文件(夹)
  284. /// </summary>
  285. /// <param name="keyValue">主键值</param>
  286. /// <param name="fileType">文件类型</param>
  287. /// <returns></returns>
  288. [HttpPost]
  289. [AjaxOnly]
  290. public ActionResult RemoveForm(string keyValue, string fileType)
  291. {
  292. if (fileType == "folder")
  293. {
  294. fileFolderBLL.RemoveForm(keyValue);
  295. }
  296. else
  297. {
  298. fileInfoBLL.RemoveForm(keyValue);
  299. }
  300. return Success("删除成功。");
  301. }
  302. /// <summary>
  303. /// 彻底删除文件(夹)
  304. /// </summary>
  305. /// <param name="keyValue">主键值</param>
  306. /// <param name="fileType">文件类型</param>
  307. /// <returns></returns>
  308. [HttpPost]
  309. [AjaxOnly]
  310. public ActionResult ThoroughRemoveForm(string keyValue, string fileType)
  311. {
  312. if (fileType == "folder")
  313. {
  314. fileFolderBLL.ThoroughRemoveForm(keyValue);
  315. }
  316. else
  317. {
  318. fileInfoBLL.ThoroughRemoveForm(keyValue);
  319. }
  320. return Success("删除成功。");
  321. }
  322. /// <summary>
  323. /// 清空回收站
  324. /// </summary>
  325. /// <returns></returns>
  326. [HttpPost]
  327. [AjaxOnly]
  328. public ActionResult EmptyRecycledForm()
  329. {
  330. fileFolderBLL.EmptyRecycledForm();
  331. return Success("操作成功。");
  332. }
  333. /// <summary>
  334. /// 保存文件夹表单(新增、修改)
  335. /// </summary>
  336. /// <param name="keyValue">主键值</param>
  337. /// <param name="fileFolderEntity">文件夹实体</param>
  338. /// <returns></returns>
  339. [HttpPost]
  340. [AjaxOnly]
  341. public ActionResult SaveFolderForm(string keyValue, FileFolderEntity fileFolderEntity)
  342. {
  343. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  344. return Success("操作成功。");
  345. }
  346. /// <summary>
  347. /// 保存文件表单(新增、修改)
  348. /// </summary>
  349. /// <param name="keyValue">主键值</param>
  350. /// <param name="fileInfoEntity">文件实体</param>
  351. /// <returns></returns>
  352. [HttpPost]
  353. [AjaxOnly]
  354. public ActionResult SaveFileForm(string keyValue, FileInfoEntity fileInfoEntity)
  355. {
  356. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  357. return Success("操作成功。");
  358. }
  359. /// <summary>
  360. /// 保存文件(夹)移动位置
  361. /// </summary>
  362. /// <param name="keyValue">主键值</param>
  363. /// <param name="moveFolderId">要移动文件夹Id</param>
  364. /// <param name="fileType">文件类型</param>
  365. /// <returns></returns>
  366. [HttpPost]
  367. [AjaxOnly]
  368. public ActionResult SaveMoveForm(string keyValue, string moveFolderId, string fileType)
  369. {
  370. if (fileType == "folder")
  371. {
  372. FileFolderEntity fileFolderEntity = new FileFolderEntity();
  373. fileFolderEntity.F_FolderId = keyValue;
  374. fileFolderEntity.F_ParentId = moveFolderId;
  375. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  376. }
  377. else
  378. {
  379. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  380. fileInfoEntity.F_FileId = keyValue;
  381. fileInfoEntity.F_FolderId = moveFolderId;
  382. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  383. }
  384. return Success("操作成功。");
  385. }
  386. /// <summary>
  387. /// 共享文件(夹)
  388. /// </summary>
  389. /// <param name="keyValue">主键值</param>
  390. /// <param name="fileType">文件类型</param>
  391. /// <param name="IsShare">是否共享:1-共享 0取消共享</param>
  392. /// <returns></returns>
  393. [HttpPost]
  394. [AjaxOnly]
  395. public ActionResult ShareFile(string keyValue, int IsShare, string fileType)
  396. {
  397. if (fileType == "folder")
  398. {
  399. fileFolderBLL.ShareFolder(keyValue, IsShare);
  400. }
  401. else
  402. {
  403. fileInfoBLL.ShareFile(keyValue, IsShare);
  404. }
  405. return Success("共享成功。");
  406. }
  407. /// <summary>
  408. /// 上传文件
  409. /// </summary>
  410. /// <param name="folderId">文件夹Id</param>
  411. /// <param name="Filedata">文件对象</param>
  412. /// <returns></returns>
  413. [HttpPost]
  414. public ActionResult UploadifyFile(string folderId, HttpPostedFileBase Filedata)
  415. {
  416. try
  417. {
  418. Thread.Sleep(500);////延迟500毫秒
  419. //没有文件上传,直接返回
  420. if (Filedata == null || string.IsNullOrEmpty(Filedata.FileName) || Filedata.ContentLength == 0)
  421. {
  422. if (Request.Files.Count > 0)
  423. {
  424. Filedata = Request.Files[0];
  425. }
  426. else
  427. {
  428. return HttpNotFound();
  429. }
  430. }
  431. //获取文件完整文件名(包含绝对路径)
  432. //文件存放路径格式:/Resource/ResourceFile/{userId}{data}/{guid}.{后缀名}
  433. string userId = LoginUserInfo.Get().userId;
  434. string fileGuid = Guid.NewGuid().ToString();
  435. long filesize = Filedata.ContentLength;
  436. string FileEextension = Path.GetExtension(Filedata.FileName);
  437. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  438. string virtualPath = string.Format("~/Resource/DocumentFile/{0}/{1}/{2}{3}", userId, uploadDate, fileGuid, FileEextension);
  439. string fullFileName = this.Server.MapPath(virtualPath);
  440. //创建文件夹
  441. string path = Path.GetDirectoryName(fullFileName);
  442. Directory.CreateDirectory(path);
  443. if (!System.IO.File.Exists(fullFileName))
  444. {
  445. //保存文件
  446. Filedata.SaveAs(fullFileName);
  447. //文件信息写入数据库
  448. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  449. fileInfoEntity.Create();
  450. fileInfoEntity.F_FileId = fileGuid;
  451. if (!string.IsNullOrEmpty(folderId))
  452. {
  453. fileInfoEntity.F_FolderId = folderId;
  454. }
  455. else
  456. {
  457. fileInfoEntity.F_FolderId = "0";
  458. }
  459. fileInfoEntity.F_FileName = Filedata.FileName;
  460. fileInfoEntity.F_FilePath = virtualPath;
  461. fileInfoEntity.F_FileSize = filesize.ToString();
  462. fileInfoEntity.F_FileExtensions = FileEextension;
  463. fileInfoEntity.F_FileType = FileEextension.Replace(".", "");
  464. fileInfoBLL.SaveForm("", fileInfoEntity);
  465. }
  466. return Success("上传成功。");
  467. }
  468. catch (Exception ex)
  469. {
  470. return Fail(ex.Message);
  471. }
  472. }
  473. /// <summary>
  474. /// 下载文件
  475. /// </summary>
  476. /// <param name="keyValue">主键</param>
  477. /// <returns></returns>
  478. [HttpPost]
  479. public void DownloadFile(string keyValue)
  480. {
  481. var data = fileInfoBLL.GetEntity(keyValue);
  482. string filename = Server.UrlDecode(data.F_FileName);//返回客户端文件名称
  483. string filepath = this.Server.MapPath(data.F_FilePath);
  484. if (FileDownHelper.FileExists(filepath))
  485. {
  486. FileDownHelper.DownLoadold(filepath, filename);
  487. }
  488. }
  489. #endregion
  490. #region
  491. /// <summary>
  492. /// 文件预览
  493. /// </summary>
  494. /// <param name="fileId">文件ID</param>
  495. /// <returns></returns>
  496. public void PreviewFile(string fileId)
  497. {
  498. var data = fileInfoBLL.GetEntity(fileId);
  499. if (data == null)
  500. {
  501. return;
  502. }
  503. string filename = Server.UrlDecode(data.F_FileName);//客户端保存的文件名
  504. string filepath = DirFileHelper.GetAbsolutePath(data.F_FilePath);//路径
  505. if (data.F_FileType == "xlsx" || data.F_FileType == "xls")
  506. {
  507. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  508. if (!DirFileHelper.IsExistFile(filepath))
  509. {
  510. //filePreviewIBLL.GetExcelData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  511. //liang 2021-6-25 改aspose预览
  512. AsposeCore.GetExcelData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  513. }
  514. }
  515. if (data.F_FileType == "docx" || data.F_FileType == "doc")
  516. {
  517. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  518. if (!DirFileHelper.IsExistFile(filepath))
  519. {
  520. //filePreviewIBLL.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  521. //liang 2021-6-25 改aspose预览
  522. AsposeCore.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  523. }
  524. }
  525. if (data.F_FileType == "ppt" || data.F_FileType == "pptx")
  526. {
  527. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  528. if (!DirFileHelper.IsExistFile(filepath))
  529. {
  530. //filePreviewIBLL.GetPptData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  531. //liang 2021-6-25 改aspose预览
  532. AsposeCore.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  533. }
  534. }
  535. //FileDownHelper.DownLoadold(filepath, filename);
  536. //FileStream files = new FileStream(filepath, FileMode.Open);
  537. //byte[] fileByte = new byte[files.Length];
  538. //files.Read(fileByte, 0, fileByte.Length);
  539. //files.Close();
  540. //System.IO.MemoryStream ms = new MemoryStream(fileByte, 0, fileByte.Length);
  541. Response.ClearContent();
  542. switch (data.F_FileType)
  543. {
  544. case "jpg":
  545. Response.ContentType = "image/jpeg";
  546. break;
  547. case "gif":
  548. Response.ContentType = "image/gif";
  549. break;
  550. case "png":
  551. Response.ContentType = "image/png";
  552. break;
  553. case "bmp":
  554. Response.ContentType = "application/x-bmp";
  555. break;
  556. case "jpeg":
  557. Response.ContentType = "image/jpeg";
  558. break;
  559. case "doc":
  560. Response.ContentType = "application/pdf";
  561. break;
  562. case "docx":
  563. Response.ContentType = "application/pdf";
  564. break;
  565. case "ppt":
  566. Response.ContentType = "application/x-ppt";
  567. break;
  568. case "pptx":
  569. Response.ContentType = "application/x-ppt";
  570. break;
  571. case "xls":
  572. Response.ContentType = "application/pdf";
  573. break;
  574. case "xlsx":
  575. Response.ContentType = "application/pdf";
  576. break;
  577. case "pdf":
  578. Response.ContentType = "application/pdf";
  579. break;
  580. case "txt":
  581. Response.ContentType = "text/plain";
  582. break;
  583. case "csv":
  584. Response.ContentType = "";
  585. break;
  586. default:
  587. Response.ContentType = "application/pdf";
  588. break;
  589. }
  590. Response.Charset = "GB2312";
  591. Response.WriteFile(filepath);
  592. //Response.BinaryWrite(ms.ToArray());
  593. }
  594. #endregion
  595. }
  596. }