BlobController.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.Extensions.Configuration;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using TEAMModelOS.SDK.Context.Configuration;
  9. using TEAMModelOS.SDK.Context.Exception;
  10. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  11. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  12. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  13. using TEAMModelOS.SDK.Helper.Network.HttpHelper;
  14. using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
  15. using TEAMModelOS.SDK.Module.AzureBlob.Interfaces;
  16. namespace TEAMModelOS.Controllers.Core
  17. {
  18. [Route("api/[controller]")]
  19. [ApiController]
  20. public class BlobController : BaseController
  21. {
  22. private readonly IAzureBlobDBRepository azureBlobDBRepository;
  23. public BlobController(IAzureBlobDBRepository _azureBlobDBRepository) {
  24. azureBlobDBRepository = _azureBlobDBRepository;
  25. }
  26. /// <summary>
  27. /// 获取某个容器的只读权限
  28. /// </summary>
  29. /// <param name="request"></param>
  30. /// <returns></returns>
  31. [HttpPost("blobSasR")]
  32. public async Task<BaseResponse> BlobSasR(JosnRequest<BlobSas> request)
  33. {
  34. ///返回金钥过期时间
  35. ResponseBuilder builder = new ResponseBuilder();
  36. // Dictionary<string, object> dict = await azureBlobDBRepository.GetBlobSasUri(request.@params,true);
  37. // dict.Add(d.Key, d.Value);
  38. return builder.Data(await azureBlobDBRepository.GetContainerSasUri(request.@params, true)).build() ;
  39. }
  40. /// <summary>
  41. /// 某个文件的上传SAS rcw权限
  42. /// </summary>
  43. /// <param name="request"></param>
  44. /// <returns></returns>
  45. [HttpPost("blobSasRCW")]
  46. public async Task<BaseResponse> BlobSasRCW(JosnRequest<BlobSas> request)
  47. {
  48. ///返回金钥过期时间
  49. ResponseBuilder builder = new ResponseBuilder();
  50. // Dictionary<string,object> dict= await azureBlobDBRepository.GetBlobSasUri(request.@params,false);
  51. // Dictionary<string, object> dict = ;
  52. //dict.Add(d.Key, d.Value);
  53. return builder.Data(await azureBlobDBRepository.GetContainerSasUri(request.@params, false)).build();
  54. }
  55. /// <summary>
  56. /// 链接只读(读)
  57. /// </summary>
  58. /// <param name="azureBlobSASDto"></param>
  59. /// <returns></returns>
  60. [HttpPost("urlSasR")]
  61. public async Task<BaseResponse> GetContainerSASRead(JosnRequest<string> azureBlobSASDto)
  62. {
  63. ResponseBuilder responseBuilder = new ResponseBuilder();
  64. string azureBlobSAS = azureBlobSASDto.@params;
  65. (string, string) a = BlobUrlString(azureBlobSAS);
  66. string ContainerName = a.Item1;
  67. string BlobName = a.Item2;
  68. bool flg = IsBlobName(BlobName);
  69. if (flg)
  70. {
  71. return responseBuilder.Data(await azureBlobDBRepository.GetBlobSasUriRead(ContainerName, BlobName)).build();
  72. }
  73. else {
  74. return responseBuilder.Error(ResponseCode.PARAMS_ERROR,"文件名错误").build();
  75. };
  76. }
  77. /// <summary>
  78. /// 获取文件内容
  79. /// </summary>
  80. /// <param name="azureBlobSASDto"></param>
  81. /// <returns></returns>
  82. [HttpPost("getText")]
  83. public async Task<BaseResponse> GetText(JosnRequest<string> request)
  84. {
  85. ResponseBuilder responseBuilder = new ResponseBuilder();
  86. string azureBlobSAS = System.Web.HttpUtility.UrlDecode(request.@params, Encoding.UTF8);
  87. (string, string) a = BlobUrlString(azureBlobSAS);
  88. string ContainerName = a.Item1;
  89. string BlobName = a.Item2;
  90. bool flg = IsBlobName(BlobName);
  91. if (flg)
  92. {
  93. BlobAuth blobAuth= await azureBlobDBRepository.GetBlobSasUriRead(ContainerName, BlobName);
  94. string text= await HttpHelper.HttpGetAsync(blobAuth.url + blobAuth.sas);
  95. JsonElement json = text.FromApiJson<JsonElement>();
  96. return responseBuilder.Data(json).build();
  97. }
  98. else
  99. {
  100. return responseBuilder.Error(ResponseCode.PARAMS_ERROR, "文件名错误").build();
  101. };
  102. }
  103. /// <summary>
  104. /// 测试单个文本内容的上传
  105. /// </summary>
  106. /// <param name="azureBlobSASDto"></param>
  107. /// <returns></returns>
  108. [HttpPost("uploadText")]
  109. public async Task<BaseResponse> UploadText(JosnRequest<string> request)
  110. {
  111. ResponseBuilder responseBuilder = new ResponseBuilder();
  112. return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn",request.@params,"exam",Guid.NewGuid().ToString()+".json")).build();
  113. }
  114. private static string ContainerUrlString(string sasUrl)
  115. {
  116. ///移除http://
  117. sasUrl = sasUrl.Substring(8);
  118. string[] sasUrls = sasUrl.Split("/");
  119. string ContainerName;
  120. ContainerName = sasUrls[1].Clone().ToString();
  121. return ContainerName;
  122. }
  123. private static (string, string) BlobUrlString(string sasUrl)
  124. {
  125. sasUrl = sasUrl.Substring(8);
  126. string[] sasUrls = sasUrl.Split("/");
  127. string ContainerName;
  128. ContainerName = sasUrls[1].Clone().ToString();
  129. string item = sasUrls[0] + "/" + sasUrls[1] + "/";
  130. string blob = sasUrl.Replace(item, "");
  131. return (ContainerName, blob);
  132. }
  133. public static bool IsBlobName(string BlobName)
  134. {
  135. return System.Text.RegularExpressions.Regex.IsMatch(BlobName,
  136. @"(?!((^(con)$)|^(con)\\..*|(^(prn)$)|^(prn)\\..*|(^(aux)$)|^(aux)\\..*|(^(nul)$)|^(nul)\\..*|(^(com)[1-9]$)|^(com)[1-9]\\..*|(^(lpt)[1-9]$)|^(lpt)[1-9]\\..*)|^\\s+|.*\\s$)(^[^\\\\\\:\\<\\>\\*\\?\\\\\\""\\\\|]{1,255}$)");
  137. }
  138. }
  139. }