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.
 
 
 
 
 
 

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