浏览代码

源站cdn推荐下载模式,mike

Jeremy 2 年之前
父节点
当前提交
31620fe82c
共有 2 个文件被更改,包括 305 次插入4 次删除
  1. 268 0
      Common/ConvertHelper.cs
  2. 37 4
      Service/AIDiagnosisService.cs

+ 268 - 0
Common/ConvertHelper.cs

@@ -0,0 +1,268 @@
+using System;
+using Newtonsoft.Json;
+using System.Globalization;
+using WingInterfaceLibrary.Enum;
+
+namespace WingAIDiagnosisService.Common
+{
+    public static class ConvertHelper
+    {
+        /// <summary>
+        /// convert object to Json string
+        /// </summary>
+        /// <param name="obj">object</param>
+        /// <param name="formatting">format</param>
+        /// <param name="settings">settings</param>
+        /// <returns></returns>
+        public static string ToJson(this object obj, Formatting formatting = Formatting.None, JsonSerializerSettings settings = null)
+        {
+            if (obj == null) return string.Empty;
+            try
+            {
+                return JsonConvert.SerializeObject(obj, formatting, settings);
+            }
+            catch { return string.Empty; }
+        }
+
+        /// <summary>
+        /// convert Json string to object
+        /// </summary>
+        /// <typeparam name="T">object type</typeparam>
+        /// <param name="jsonStr">Json string</param>
+        /// <param name="settings">settings</param>
+        /// <returns></returns>
+        public static T JsonToObj<T>(this string jsonStr, JsonSerializerSettings settings = null)
+        {
+            if (string.IsNullOrWhiteSpace(jsonStr)) return default(T);
+            try
+            {
+                return JsonConvert.DeserializeObject<T>(jsonStr, settings);
+            }
+            catch(Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                return default(T);
+            }
+        }
+
+        /// <summary>
+        /// convert Json string to object
+        /// </summary>
+        /// <param name="jsonStr">Json string</param>
+        /// <param name="type">object type</param>
+        /// <param name="settings">settings</param>
+        /// <returns></returns>
+        public static object JsonToObj(this string jsonStr, Type type, JsonSerializerSettings settings = null)
+        {
+            if (string.IsNullOrWhiteSpace(jsonStr)) return type.IsValueType ? Activator.CreateInstance(type) : null;
+            try
+            {
+                return JsonConvert.DeserializeObject(jsonStr, type, settings);
+            }
+            catch { return type.IsValueType ? Activator.CreateInstance(type) : null; }
+        }
+        /// <summary>
+        /// convert sting to int
+        /// </summary>
+        /// <param name="str">string</param>
+        /// <param name="defaultValue">default Value</param>
+        /// <returns></returns>
+        public static int ToInt(this string str, int defaultValue = 0)
+        {
+            if (string.IsNullOrWhiteSpace(str)) return defaultValue;
+            int.TryParse(str, out defaultValue);
+            return defaultValue;
+        }
+
+        public static double ToDouble(this string str, double defaultValue = 0)
+        {
+            if (string.IsNullOrWhiteSpace(str)) return defaultValue;
+            double.TryParse(str, out defaultValue);
+            return defaultValue;
+        }
+
+        /// <summary>
+        /// convert sting to float
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="defaultValue"></param>
+        /// <returns></returns>
+        public static float ToFloat(this string str, float defaultValue = 0)
+        {
+            if (string.IsNullOrWhiteSpace(str)) return defaultValue;
+            float.TryParse(str, out defaultValue);
+            return defaultValue;
+        }
+
+        /// <summary>
+        /// convert sting to DateTime
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="defaultValue"></param>
+        /// <returns></returns>
+        public static DateTime ToDateTime(this string str)
+        {
+            DateTime defaultValue;
+            if (string.IsNullOrWhiteSpace(str)) return DateTime.MinValue;
+            DateTime.TryParse(str, out defaultValue);
+            return defaultValue;
+        }
+
+        /// <summary>
+        /// convert sting to int
+        /// </summary>
+        /// <param name="str">string</param>
+        /// <param name="defaultValue">default Value</param>
+        /// <returns></returns>
+        public static long ToLong(this string str, long defaultValue = 0)
+        {
+            if (string.IsNullOrWhiteSpace(str)) return defaultValue;
+            long.TryParse(str, out defaultValue);
+            return defaultValue;
+        }
+
+        /// <summary>
+        /// Convert string to other type object
+        /// </summary>
+        /// <param name="str">string</param>
+        /// <param name="type">type</param>
+        /// <returns></returns>
+        public static object ToObject(this string str, Type type)
+        {
+            try
+            {
+                return Convert.ChangeType(str, type, CultureInfo.InvariantCulture);
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+                return type.IsValueType ? Activator.CreateInstance(type) : null;
+            }
+        }
+
+        /// <summary>
+        /// convert sting to Boolean
+        /// </summary>
+        /// <param name="str">sting</param>
+        /// <returns></returns>
+        public static bool ToBool(this string str)
+        {
+            if (string.IsNullOrWhiteSpace(str)) return false;
+            bool.TryParse(str, out bool val);
+            return val;
+        }
+
+        /// <summary>
+        /// 验证是否为空
+        /// </summary>
+        /// <param name="str">sting</param>
+        /// <returns>true</returns>
+        public static bool IsEmpty(this string str)
+        {
+            if (string.IsNullOrWhiteSpace(str))
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 时间转长整形的时间戳
+        /// </summary>
+        /// <param name="time">当前时间</param>
+        /// <param name="isUtc">是否utc格式时间戳</param>
+        /// <returns>true</returns>
+        public static long ToTimestamp(this DateTime time, bool isUtc = false)
+        {
+            DateTime refTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1970, 1, 1), TimeZoneInfo.Utc);
+            var diffSpan = (isUtc ? time : time.ToUniversalTime()) - refTime;
+            long unixTime = (long)Math.Round(diffSpan.TotalMilliseconds, MidpointRounding.AwayFromZero);
+            return unixTime;
+        }
+
+        
+        /// <summary>
+        /// url转token
+        /// </summary>
+        /// <param name="url">url地址</param>
+        /// <returns>true</returns>
+        public static string ToUrlToken(this string url)
+        {
+            string fileToken = "";
+            if (string.IsNullOrWhiteSpace(url))
+            {
+                return fileToken;
+            }
+            var fileName = "";
+            if (url.Contains("http://") || url.Contains("https://"))
+            {
+                fileToken = TransferUrlToToken(url);
+                return fileToken;
+            }
+            else
+            {
+                fileName = url;
+            }
+            //处理 传的是token 的情况
+            if (string.IsNullOrEmpty(fileName))
+            {
+                return fileToken;
+            }
+            if (fileName.Split('.').Length > 1)
+            {
+                int lastIndex = fileName.LastIndexOf('.');
+                var fileExtend = fileName.Substring(lastIndex + 1);
+                try
+                {
+                    var fileTypeEnum = (WingInterfaceLibrary.Enum.UploadFileTypeEnum)Enum.Parse(typeof(WingInterfaceLibrary.Enum.UploadFileTypeEnum), fileExtend.ToUpper());
+                    var fileType = Enum.GetName(typeof(WingInterfaceLibrary.Enum.UploadFileTypeEnum), fileTypeEnum.GetHashCode());
+                    if (!string.IsNullOrEmpty(fileType))
+                    {
+                        fileName = fileName.Substring(0, lastIndex);
+                    }
+                    else
+                    {
+                        fileName = "";
+                    }
+                }
+                catch (Exception ex)
+                {
+                    fileName = "";
+                }
+            }
+            if (fileName.Split('_').Length > 1)
+            {
+                fileToken = fileName;
+            }
+            return fileToken;
+        }
+
+/// <summary>
+        /// url转token
+        /// </summary>
+        /// <param name="url">url地址</param>
+        /// <returns>true</returns>
+        private static string TransferUrlToToken(string url)
+        {
+            //需要做处理
+            var newUrl = url.Replace("http://", "").Replace("https://", "");
+            var urlArray = newUrl.Split('/');
+            var storageServer = WingServerCommon.Config.ConfigurationManager.GetParammeter<WingServerCommon.Config.Parameters.StringParameter>("Storage", "StorageServer").Value;
+            if (storageServer == "COS") {
+                if (urlArray.Length >= 2)
+                {
+                    var storageSettingsParam = WingServerCommon.Config.ConfigurationManager.StorageSettings;
+                    var fileName = storageSettingsParam.CDNServerUrl + "/" + urlArray[1];
+                    return fileName;
+                }
+                else {
+                    return url;
+                }
+            }
+            else {
+                return url;
+            }
+        }     
+
+    }
+}

+ 37 - 4
Service/AIDiagnosisService.cs

@@ -31,6 +31,7 @@ using Emgu.CV;
 using Emgu.CV.CvEnum;
 using Emgu.CV.Structure;
 using System.Net.Http.Headers;
+using WingAIDiagnosisService.Common;
 
 namespace WingAIDiagnosisService.Service
 {
@@ -366,18 +367,26 @@ namespace WingAIDiagnosisService.Service
                     File.Delete(resampleInputData.PlaqueAIImagePath);
                 }
                 var surfaceImageList = new List<string>();
+                long  surfaceFileSize=0;
+                var  cdnSurfaceFile="";
                 if (!string.IsNullOrWhiteSpace(resampleInputData.SurfaceFilePath) && File.Exists(resampleInputData.SurfaceFilePath))
                 {
                     surfaceImageList = await SurfaceFile(resampleInputData.SurfaceFilePath);
-                    var fileUrl = await UploadFileAsync(resampleInputData.SurfaceFilePath, Path.GetFileName(resampleInputData.SurfaceFilePath));
+                    var surfaceFileTuple = await UploadFileTupleAsync(resampleInputData.SurfaceFilePath, Path.GetFileName(resampleInputData.SurfaceFilePath));
+                    surfaceFileSize=surfaceFileTuple.Item2;
                     File.Delete(resampleInputData.SurfaceFilePath);
-                    resampleInputData.SurfaceFilePath = fileUrl;
+                    resampleInputData.SurfaceFilePath = surfaceFileTuple.Item1;
+                    cdnSurfaceFile= surfaceFileTuple.Item1.ToUrlToken();//ToCDN
                 }
+                 long  mdlFileFileSize=0;
+                  var  cdnMdlFile="";
                 if (!string.IsNullOrWhiteSpace(resampleInputData.MdlFilePath) && File.Exists(resampleInputData.MdlFilePath))
                 {
-                    var fileUrl = await UploadFileAsync(resampleInputData.MdlFilePath, Path.GetFileName(resampleInputData.MdlFilePath));
+                    var mdlFileTuple = await UploadFileTupleAsync(resampleInputData.MdlFilePath, Path.GetFileName(resampleInputData.MdlFilePath));
+                    mdlFileFileSize=mdlFileTuple.Item2;
                     File.Delete(resampleInputData.MdlFilePath);
-                    resampleInputData.MdlFilePath = fileUrl;
+                    resampleInputData.MdlFilePath = mdlFileTuple.Item1;
+                    cdnMdlFile= mdlFileTuple.Item1.ToUrlToken();//ToCDN
                 }
 
                 var result = new CarotidResultDTO
@@ -385,7 +394,11 @@ namespace WingAIDiagnosisService.Service
                     CarotidScanType = (CarotidScanTypeEnum)resampleInputData.ScanType,
                     CarotidScanDirection = (CarotidScanDirectionEnum)resampleInputData.CarotidScanDirection,
                     SurfaceFile = resampleInputData.SurfaceFilePath,
+                    SurfaceFileSize=surfaceFileSize,
+                    CDNSurfaceFile=cdnSurfaceFile,
+                    MdlFileSize=mdlFileFileSize,
                     MdlFile = resampleInputData.MdlFilePath,
+                    CDNMdlFile=cdnMdlFile,
                     MeasureImageFiles = carotidAIImageTokens.Select(x => new MeasureImageFileDTO { ImageType = (CarotidAIImageTypeEnum)x.AIImageType, ImageFile = x.AIImageToken }).ToList(),
                     MeasureResult = JsonConvert.SerializeObject(resampleResult.CarotidAIMeasureResult),
                     SurfaceImageList = surfaceImageList,
@@ -732,6 +745,26 @@ namespace WingAIDiagnosisService.Service
             return fileToken;
         }
 
+
+        /// <summary>
+        /// 上传文件
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <param name="fileName"></param>
+        /// <returns></returns>
+        private async Task<Tuple<string, long>> UploadFileTupleAsync(string filePath, string fileName)
+        {
+            var fileToken = "";
+            long size = 0;
+            using (var fileStream = new FileStream(filePath, FileMode.Open))
+            {
+                size = fileStream.Length;
+                byte[] buffer = new byte[fileStream.Length];
+                fileStream.Read(buffer, 0, buffer.Length);
+                fileToken = await DoUploadFile(fileName, buffer);
+            }
+            return new Tuple<string, long>(fileToken, size);
+        }
         /// <summary>
         /// 上传文件
         /// </summary>