AdFileController.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Ips.Library.Basic;
  2. using Ips.Library.WebApi;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.AspNetCore.StaticFiles;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.Hosting;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.ComponentModel.DataAnnotations;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. namespace Ips.Service.CapServer.Controllers
  17. {
  18. /// <summary>
  19. /// 文件操作接口
  20. /// 可通过浏览器访问http://{baseurl}/data预览文件
  21. /// </summary>
  22. public class AdFileController : BaseController
  23. {
  24. /// <summary>
  25. /// 下载采集的文件
  26. /// </summary>
  27. /// <param name="fileName">采集返回的名称</param>
  28. /// <returns></returns>
  29. [HttpGet]
  30. public IActionResult Download(string fileName)
  31. {
  32. if (string.IsNullOrWhiteSpace(fileName))
  33. {
  34. return NotFound("必须指定要下载的文件");
  35. }
  36. if (fileName.StartsWith("/"))
  37. fileName = fileName.Substring(1);
  38. string localFile = Path.Combine(AppConst.DataDir, fileName);
  39. try
  40. {
  41. if (!System.IO.File.Exists(localFile))
  42. {
  43. IpsLogger.Error($"下载失败,文件[{localFile}]不存在");
  44. return NotFound($"文件[{fileName}]不存在");
  45. }
  46. var fileStream = new FileStream(localFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, 4096, true); //异步读取文件
  47. return File(fileStream, "application/octet-stream", fileName, true); //为true时,支持断点续传
  48. }
  49. catch (Exception ex)
  50. {
  51. IpsLogger.Error($"文件[{localFile}]下载失败", ex);
  52. return NotFound($"文件[{fileName}]下载失败");
  53. }
  54. }
  55. }
  56. }