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.
 
 
 
 
 
 

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