選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

556 行
19 KiB

  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. #endregion
  85. #region 获取数据
  86. /// <summary>
  87. /// 文件夹列表
  88. /// </summary>
  89. /// <returns>返回树形Json</returns>
  90. [HttpGet]
  91. public ActionResult GetTreeJson()
  92. {
  93. string userId = LoginUserInfo.Get().userId;
  94. var data = fileFolderBLL.GetList(userId);
  95. var treeList = new List<TreeModel>();
  96. foreach (FileFolderEntity item in data)
  97. {
  98. TreeModel tree = new TreeModel();
  99. bool hasChildren = data.Count(t => t.F_ParentId == item.F_FolderId) == 0 ? false : true;
  100. tree.id = item.F_FolderId;
  101. tree.text = item.F_FolderName;
  102. tree.value = item.F_FolderId;
  103. tree.parentId = item.F_ParentId;
  104. tree.isexpand = true;
  105. tree.complete = true;
  106. tree.hasChildren = hasChildren;
  107. if (hasChildren == false)
  108. {
  109. tree.icon = "fa fa-folder";
  110. }
  111. treeList.Add(tree);
  112. }
  113. return JsonResult(treeList);
  114. }
  115. /// <summary>
  116. /// 所有文件(夹)列表
  117. /// </summary>
  118. /// <param name="folderId">文件夹Id</param>
  119. /// <returns>返回列表Json</returns>
  120. [HttpGet]
  121. public ActionResult GetListJson(string folderId)
  122. {
  123. string userId = LoginUserInfo.Get().userId;
  124. var data = fileInfoBLL.GetList(folderId, userId);
  125. return JsonResult(data);
  126. }
  127. /// <summary>
  128. /// 文档列表
  129. /// </summary>
  130. /// <returns>返回列表Json</returns>
  131. [HttpGet]
  132. public ActionResult GetDocumentListJson()
  133. {
  134. string userId = LoginUserInfo.Get().userId;
  135. var data = fileInfoBLL.GetDocumentList(userId);
  136. return JsonResult(data);
  137. }
  138. /// <summary>
  139. /// 图片列表
  140. /// </summary>
  141. /// <returns>返回列表Json</returns>
  142. [HttpGet]
  143. public ActionResult GetImageListJson()
  144. {
  145. string userId = LoginUserInfo.Get().userId;
  146. var data = fileInfoBLL.GetImageList(userId);
  147. return JsonResult(data);
  148. }
  149. /// <summary>
  150. /// 回收站文件(夹)列表
  151. /// </summary>
  152. /// <returns>返回列表Json</returns>
  153. [HttpGet]
  154. public ActionResult GetRecycledListJson()
  155. {
  156. string userId = LoginUserInfo.Get().userId;
  157. var data = fileInfoBLL.GetRecycledList(userId);
  158. return JsonResult(data);
  159. }
  160. /// <summary>
  161. /// 我的文件(夹)共享列表
  162. /// </summary>
  163. /// <returns>返回列表Json</returns>
  164. [HttpGet]
  165. public ActionResult GetMyShareListJson()
  166. {
  167. string userId = LoginUserInfo.Get().userId;
  168. var data = fileInfoBLL.GetMyShareList(userId);
  169. return JsonResult(data);
  170. }
  171. /// <summary>
  172. /// 他人文件(夹)共享列表
  173. /// </summary>
  174. /// <returns>返回列表Json</returns>
  175. [HttpGet]
  176. public ActionResult GetOthersShareListJson()
  177. {
  178. string userId = LoginUserInfo.Get().userId;
  179. var data = fileInfoBLL.GetOthersShareList(userId);
  180. return JsonResult(data);
  181. }
  182. /// <summary>
  183. /// 文件夹实体
  184. /// </summary>
  185. /// <param name="keyValue">主键值</param>
  186. /// <returns>返回对象Json</returns>
  187. [HttpGet]
  188. public ActionResult GetFolderFormJson(string keyValue)
  189. {
  190. var data = fileFolderBLL.GetEntity(keyValue);
  191. return JsonResult(data);
  192. }
  193. /// <summary>
  194. /// 文件实体
  195. /// </summary>
  196. /// <param name="keyValue">主键值</param>
  197. /// <returns>返回对象Json</returns>
  198. [HttpGet]
  199. public ActionResult GetFileFormJson(string keyValue)
  200. {
  201. var data = fileInfoBLL.GetEntity(keyValue);
  202. return JsonResult(data);
  203. }
  204. #endregion
  205. #region 提交数据
  206. /// <summary>
  207. /// 还原文件(夹)
  208. /// </summary>
  209. /// <param name="keyValue">主键值</param>
  210. /// <param name="fileType">文件类型</param>
  211. /// <returns></returns>
  212. [HttpPost]
  213. [AjaxOnly]
  214. public ActionResult RestoreFile(string keyValue, string fileType)
  215. {
  216. if (fileType == "folder")
  217. {
  218. fileFolderBLL.RestoreFile(keyValue);
  219. }
  220. else
  221. {
  222. fileInfoBLL.RestoreFile(keyValue);
  223. }
  224. return Success("还原成功。");
  225. }
  226. /// <summary>
  227. /// 删除文件(夹)
  228. /// </summary>
  229. /// <param name="keyValue">主键值</param>
  230. /// <param name="fileType">文件类型</param>
  231. /// <returns></returns>
  232. [HttpPost]
  233. [AjaxOnly]
  234. public ActionResult RemoveForm(string keyValue, string fileType)
  235. {
  236. if (fileType == "folder")
  237. {
  238. fileFolderBLL.RemoveForm(keyValue);
  239. }
  240. else
  241. {
  242. fileInfoBLL.RemoveForm(keyValue);
  243. }
  244. return Success("删除成功。");
  245. }
  246. /// <summary>
  247. /// 彻底删除文件(夹)
  248. /// </summary>
  249. /// <param name="keyValue">主键值</param>
  250. /// <param name="fileType">文件类型</param>
  251. /// <returns></returns>
  252. [HttpPost]
  253. [AjaxOnly]
  254. public ActionResult ThoroughRemoveForm(string keyValue, string fileType)
  255. {
  256. if (fileType == "folder")
  257. {
  258. fileFolderBLL.ThoroughRemoveForm(keyValue);
  259. }
  260. else
  261. {
  262. fileInfoBLL.ThoroughRemoveForm(keyValue);
  263. }
  264. return Success("删除成功。");
  265. }
  266. /// <summary>
  267. /// 清空回收站
  268. /// </summary>
  269. /// <returns></returns>
  270. [HttpPost]
  271. [AjaxOnly]
  272. public ActionResult EmptyRecycledForm()
  273. {
  274. fileFolderBLL.EmptyRecycledForm();
  275. return Success("操作成功。");
  276. }
  277. /// <summary>
  278. /// 保存文件夹表单(新增、修改)
  279. /// </summary>
  280. /// <param name="keyValue">主键值</param>
  281. /// <param name="fileFolderEntity">文件夹实体</param>
  282. /// <returns></returns>
  283. [HttpPost]
  284. [AjaxOnly]
  285. public ActionResult SaveFolderForm(string keyValue, FileFolderEntity fileFolderEntity)
  286. {
  287. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  288. return Success("操作成功。");
  289. }
  290. /// <summary>
  291. /// 保存文件表单(新增、修改)
  292. /// </summary>
  293. /// <param name="keyValue">主键值</param>
  294. /// <param name="fileInfoEntity">文件实体</param>
  295. /// <returns></returns>
  296. [HttpPost]
  297. [AjaxOnly]
  298. public ActionResult SaveFileForm(string keyValue, FileInfoEntity fileInfoEntity)
  299. {
  300. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  301. return Success("操作成功。");
  302. }
  303. /// <summary>
  304. /// 保存文件(夹)移动位置
  305. /// </summary>
  306. /// <param name="keyValue">主键值</param>
  307. /// <param name="moveFolderId">要移动文件夹Id</param>
  308. /// <param name="fileType">文件类型</param>
  309. /// <returns></returns>
  310. [HttpPost]
  311. [AjaxOnly]
  312. public ActionResult SaveMoveForm(string keyValue, string moveFolderId, string fileType)
  313. {
  314. if (fileType == "folder")
  315. {
  316. FileFolderEntity fileFolderEntity = new FileFolderEntity();
  317. fileFolderEntity.F_FolderId = keyValue;
  318. fileFolderEntity.F_ParentId = moveFolderId;
  319. fileFolderBLL.SaveForm(keyValue, fileFolderEntity);
  320. }
  321. else
  322. {
  323. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  324. fileInfoEntity.F_FileId = keyValue;
  325. fileInfoEntity.F_FolderId = moveFolderId;
  326. fileInfoBLL.SaveForm(keyValue, fileInfoEntity);
  327. }
  328. return Success("操作成功。");
  329. }
  330. /// <summary>
  331. /// 共享文件(夹)
  332. /// </summary>
  333. /// <param name="keyValue">主键值</param>
  334. /// <param name="fileType">文件类型</param>
  335. /// <param name="IsShare">是否共享:1-共享 0取消共享</param>
  336. /// <returns></returns>
  337. [HttpPost]
  338. [AjaxOnly]
  339. public ActionResult ShareFile(string keyValue, int IsShare, string fileType)
  340. {
  341. if (fileType == "folder")
  342. {
  343. fileFolderBLL.ShareFolder(keyValue, IsShare);
  344. }
  345. else
  346. {
  347. fileInfoBLL.ShareFile(keyValue, IsShare);
  348. }
  349. return Success("共享成功。");
  350. }
  351. /// <summary>
  352. /// 上传文件
  353. /// </summary>
  354. /// <param name="folderId">文件夹Id</param>
  355. /// <param name="Filedata">文件对象</param>
  356. /// <returns></returns>
  357. [HttpPost]
  358. public ActionResult UploadifyFile(string folderId, HttpPostedFileBase Filedata)
  359. {
  360. try
  361. {
  362. Thread.Sleep(500);////延迟500毫秒
  363. //没有文件上传,直接返回
  364. if (Filedata == null || string.IsNullOrEmpty(Filedata.FileName) || Filedata.ContentLength == 0)
  365. {
  366. if (Request.Files.Count > 0)
  367. {
  368. Filedata = Request.Files[0];
  369. }
  370. else
  371. {
  372. return HttpNotFound();
  373. }
  374. }
  375. //获取文件完整文件名(包含绝对路径)
  376. //文件存放路径格式:/Resource/ResourceFile/{userId}{data}/{guid}.{后缀名}
  377. string userId = LoginUserInfo.Get().userId;
  378. string fileGuid = Guid.NewGuid().ToString();
  379. long filesize = Filedata.ContentLength;
  380. string FileEextension = Path.GetExtension(Filedata.FileName);
  381. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  382. string virtualPath = string.Format("~/Resource/DocumentFile/{0}/{1}/{2}{3}", userId, uploadDate, fileGuid, FileEextension);
  383. string fullFileName = this.Server.MapPath(virtualPath);
  384. //创建文件夹
  385. string path = Path.GetDirectoryName(fullFileName);
  386. Directory.CreateDirectory(path);
  387. if (!System.IO.File.Exists(fullFileName))
  388. {
  389. //保存文件
  390. Filedata.SaveAs(fullFileName);
  391. //文件信息写入数据库
  392. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  393. fileInfoEntity.Create();
  394. fileInfoEntity.F_FileId = fileGuid;
  395. if (!string.IsNullOrEmpty(folderId))
  396. {
  397. fileInfoEntity.F_FolderId = folderId;
  398. }
  399. else
  400. {
  401. fileInfoEntity.F_FolderId = "0";
  402. }
  403. fileInfoEntity.F_FileName = Filedata.FileName;
  404. fileInfoEntity.F_FilePath = virtualPath;
  405. fileInfoEntity.F_FileSize = filesize.ToString();
  406. fileInfoEntity.F_FileExtensions = FileEextension;
  407. fileInfoEntity.F_FileType = FileEextension.Replace(".", "");
  408. fileInfoBLL.SaveForm("", fileInfoEntity);
  409. }
  410. return Success("上传成功。");
  411. }
  412. catch (Exception ex)
  413. {
  414. return Fail(ex.Message);
  415. }
  416. }
  417. /// <summary>
  418. /// 下载文件
  419. /// </summary>
  420. /// <param name="keyValue">主键</param>
  421. /// <returns></returns>
  422. [HttpPost]
  423. public void DownloadFile(string keyValue)
  424. {
  425. var data = fileInfoBLL.GetEntity(keyValue);
  426. string filename = Server.UrlDecode(data.F_FileName);//返回客户端文件名称
  427. string filepath = this.Server.MapPath(data.F_FilePath);
  428. if (FileDownHelper.FileExists(filepath))
  429. {
  430. FileDownHelper.DownLoadold(filepath, filename);
  431. }
  432. }
  433. #endregion
  434. #region
  435. /// <summary>
  436. /// 文件预览
  437. /// </summary>
  438. /// <param name="fileId">文件ID</param>
  439. /// <returns></returns>
  440. public void PreviewFile(string fileId)
  441. {
  442. var data = fileInfoBLL.GetEntity(fileId);
  443. if (data == null)
  444. {
  445. return;
  446. }
  447. string filename = Server.UrlDecode(data.F_FileName);//客户端保存的文件名
  448. string filepath = DirFileHelper.GetAbsolutePath(data.F_FilePath);//路径
  449. if (data.F_FileType == "xlsx" || data.F_FileType == "xls")
  450. {
  451. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  452. if (!DirFileHelper.IsExistFile(filepath))
  453. {
  454. //filePreviewIBLL.GetExcelData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  455. //liang 2021-6-25 改aspose预览
  456. AsposeCore.GetExcelData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  457. }
  458. }
  459. if (data.F_FileType == "docx" || data.F_FileType == "doc")
  460. {
  461. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  462. if (!DirFileHelper.IsExistFile(filepath))
  463. {
  464. //filePreviewIBLL.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  465. //liang 2021-6-25 改aspose预览
  466. AsposeCore.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  467. }
  468. }
  469. if (data.F_FileType == "ppt" || data.F_FileType == "pptx")
  470. {
  471. filepath = filepath.Substring(0, filepath.LastIndexOf(".")) + ".pdf";//文件名
  472. if (!DirFileHelper.IsExistFile(filepath))
  473. {
  474. //filePreviewIBLL.GetPptData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  475. //liang 2021-6-25 改aspose预览
  476. AsposeCore.GetWordData(DirFileHelper.GetAbsolutePath(data.F_FilePath));
  477. }
  478. }
  479. //FileDownHelper.DownLoadold(filepath, filename);
  480. //FileStream files = new FileStream(filepath, FileMode.Open);
  481. //byte[] fileByte = new byte[files.Length];
  482. //files.Read(fileByte, 0, fileByte.Length);
  483. //files.Close();
  484. //System.IO.MemoryStream ms = new MemoryStream(fileByte, 0, fileByte.Length);
  485. Response.ClearContent();
  486. switch (data.F_FileType)
  487. {
  488. case "jpg":
  489. Response.ContentType = "image/jpeg";
  490. break;
  491. case "gif":
  492. Response.ContentType = "image/gif";
  493. break;
  494. case "png":
  495. Response.ContentType = "image/png";
  496. break;
  497. case "bmp":
  498. Response.ContentType = "application/x-bmp";
  499. break;
  500. case "jpeg":
  501. Response.ContentType = "image/jpeg";
  502. break;
  503. case "doc":
  504. Response.ContentType = "application/pdf";
  505. break;
  506. case "docx":
  507. Response.ContentType = "application/pdf";
  508. break;
  509. case "ppt":
  510. Response.ContentType = "application/x-ppt";
  511. break;
  512. case "pptx":
  513. Response.ContentType = "application/x-ppt";
  514. break;
  515. case "xls":
  516. Response.ContentType = "application/pdf";
  517. break;
  518. case "xlsx":
  519. Response.ContentType = "application/pdf";
  520. break;
  521. case "pdf":
  522. Response.ContentType = "application/pdf";
  523. break;
  524. case "txt":
  525. Response.ContentType = "text/plain";
  526. break;
  527. case "csv":
  528. Response.ContentType = "";
  529. break;
  530. default:
  531. Response.ContentType = "application/pdf";
  532. break;
  533. }
  534. Response.Charset = "GB2312";
  535. Response.WriteFile(filepath);
  536. //Response.BinaryWrite(ms.ToArray());
  537. }
  538. #endregion
  539. }
  540. }