FileBll.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using FirmHttpDao;
  2. using FWindSoft.Net.Http;
  3. using FWindSoft.Tools.SystemUtil;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net.Http;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using SAGA.DotNetUtils.Data;
  12. namespace Com.FirmLib.Bll
  13. {
  14. /// <summary>
  15. /// 文件操作相关
  16. /// </summary>
  17. public class FileBll : BaseHttpBll
  18. {
  19. public FileBll() : base(@"")
  20. { }
  21. /// <summary>
  22. /// 获取键值
  23. /// </summary>
  24. /// <param name="levels"></param>
  25. /// <returns></returns>
  26. public string CreateKey(params string[] levels)
  27. {
  28. string timeStr = DateTime.Now.ToString("yyyyMMddHHmmssfff");
  29. string baseStr = "default";
  30. if (levels.Any())
  31. baseStr=string.Join("-", levels);
  32. return $"{baseStr}-{SystemInfoUtil.GetMacAddress()}{timeStr}";
  33. }
  34. /// <summary>
  35. /// 创建带后缀的键值
  36. /// </summary>
  37. /// <param name="suffix">后缀</param>
  38. /// <param name="levels"></param>
  39. /// <returns></returns>
  40. public string CreateKey(string suffix,params string[] levels)
  41. {
  42. string tempKey = CreateKey(levels);
  43. return $"{tempKey}*{suffix}";
  44. }
  45. /// <summary>
  46. /// 获取键值的后缀
  47. /// </summary>
  48. /// <param name="fileKey"></param>
  49. /// <returns></returns>
  50. public string GetSuffix(string fileKey)
  51. {
  52. if (string.IsNullOrEmpty(fileKey))
  53. return string.Empty;
  54. var index = fileKey.LastIndexOf("*");
  55. if (index < 0 || index >= (fileKey.Count() - 1))
  56. return fileKey;
  57. return fileKey.Substring(index + 1);
  58. }
  59. #region 图片相关
  60. /// <summary>
  61. /// 上传图片
  62. /// </summary>
  63. /// <param name="validate"></param>
  64. /// <param name="key"></param>
  65. /// <param name="bytes"></param>
  66. /// <returns></returns>
  67. public bool UploadImage(FileUrlValidate validate, string key, byte[] bytes)
  68. {
  69. StringBuilder builder = new StringBuilder();
  70. builder.Append(BllHttpSetting.Instance.FileUri);
  71. builder.Append(@"/image-service/common/image_upload");
  72. QueryParameters parameter = new QueryParameters();
  73. parameter.Add("systemId", validate.SystemId);
  74. parameter.Add("secret", validate.Secret);
  75. parameter.Add("key", key);
  76. parameter.Add("overwrite", true.ToString());
  77. builder.Append(parameter.ToString());
  78. HttpClient client = new HttpClient();
  79. var flag = false;
  80. using (MemoryStream stream = new MemoryStream(bytes))
  81. {
  82. var result = client.PostAsync(new Uri(builder.ToString(), UriKind.RelativeOrAbsolute), new StreamContent(stream));
  83. var stringResult = HandlerTaskResponse(result, new RequestInfo(builder.ToString()));
  84. flag = HandlerResult(stringResult, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
  85. }
  86. return flag;
  87. }
  88. /// <summary>
  89. /// 获取图片地址
  90. /// </summary>
  91. /// <param name="validate"></param>
  92. /// <param name="key"></param>
  93. /// <param name="width"></param>
  94. /// <param name="height"></param>
  95. /// <returns></returns>
  96. public string CreateImageUrl(FileUrlValidate validate, string key, double width, double height)
  97. {
  98. StringBuilder builder = new StringBuilder();
  99. builder.Append(BllHttpSetting.Instance.FileUri);
  100. builder.Append($"/image-service/common/image_get?systemId={validate.SystemId}&key={key}");
  101. if (width != 0)
  102. {
  103. builder.Append($"&width={width}");
  104. }
  105. if (height != 0)
  106. {
  107. builder.Append($"&width={height}");
  108. }
  109. return builder.ToString();
  110. }
  111. public string CreateImageUrl(FileUrlValidate validate, string key)
  112. {
  113. return CreateImageUrl(validate, key, 0, 0);
  114. }
  115. #endregion
  116. #region 文件相关
  117. /// <summary>
  118. /// 上传文件
  119. /// </summary>
  120. /// <param name="validate"></param>
  121. /// <param name="key"></param>
  122. /// <param name="bytes"></param>
  123. /// <returns></returns>
  124. public bool UploadFile(FileUrlValidate validate, string key, byte[] bytes)
  125. {
  126. StringBuilder builder = new StringBuilder();
  127. builder.Append(BllHttpSetting.Instance.FileUri);
  128. builder.Append(@"/image-service/common/file_upload");
  129. QueryParameters parameter = new QueryParameters();
  130. parameter.Add("systemId", validate.SystemId);
  131. parameter.Add("secret", validate.Secret);
  132. parameter.Add("key", key);
  133. parameter.Add("overwrite", true.ToString());
  134. builder.Append(parameter.ToString());
  135. HttpClient client = HttpClientManager.CreateClient();
  136. var flag = false;
  137. using (MemoryStream stream = new MemoryStream(bytes))
  138. {
  139. var result = client.PostAsync(new Uri(builder.ToString(), UriKind.RelativeOrAbsolute), new StreamContent(stream));
  140. var stringResult = HandlerTaskResponse(result, new RequestInfo(builder.ToString()));
  141. flag = HandlerResult(stringResult, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
  142. }
  143. return flag;
  144. }
  145. /// <summary>
  146. /// 获取文件下载Url
  147. /// </summary>
  148. /// <param name="validate"></param>
  149. /// <param name="key"></param>
  150. /// <returns></returns>
  151. public string CreateFileUrl(FileUrlValidate validate, string key)
  152. {
  153. StringBuilder builder = new StringBuilder();
  154. builder.Append(BllHttpSetting.Instance.FileUri);
  155. builder.Append($"/image-service/common/file_get/{key}?systemId={validate.SystemId}");
  156. return builder.ToString();
  157. }
  158. #endregion
  159. /// <summary>
  160. /// 下载文件
  161. /// </summary>
  162. /// <param name="url"></param>
  163. /// <returns></returns>
  164. public byte[] DownLoadFile(string url)
  165. {
  166. byte[] bytes = null;
  167. try
  168. {
  169. HttpClient client = HttpClientManager.CreateClient();
  170. var resultBytes = client.GetByteArrayAsync(url);
  171. bytes = resultBytes.Result;
  172. //var stream = resultStream.Result;
  173. //if (stream != null)
  174. //{
  175. // bytes = new byte[stream.Length];
  176. // stream.Read(bytes, 0, bytes.Length);
  177. // // 设置当前流的位置为流的开始
  178. // //stream.Seek(0, SeekOrigin.Begin);
  179. // stream.Dispose();
  180. //}
  181. return bytes;
  182. }
  183. catch (Exception)
  184. {
  185. }
  186. return bytes;
  187. }
  188. /// <summary>
  189. /// 下载文件到本地路径
  190. /// </summary>
  191. /// <param name="url"></param>
  192. /// <param name="path"></param>
  193. /// <returns></returns>
  194. public bool DownLoadFile(string url,string path)
  195. {
  196. var bytes = DownLoadFile(url);
  197. if (bytes == null)
  198. return false;
  199. File.WriteAllBytes(path, bytes);
  200. return true;
  201. }
  202. }
  203. }