using System; using System.IO; using System.Threading.Tasks; using Vinno.IUS.Common.IO; using Vinno.vCloud.Common.Storage.Download; using Vinno.vCloud.Report.Models; namespace ReportConverter { class GetReportInfo { private readonly string _storageServerUrl = string.Empty; private readonly int _storageType = 0; private readonly string _fileCacheFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadFileCacheFolder"); public GetReportInfo(string storageServerUrl, int storageType) { _storageServerUrl = storageServerUrl ?? string.Empty; _storageType = storageType; } /// /// get report image from storage server /// /// reportInfo entitys /// public async Task GetReportInfoAsync(ReportInfo reportInfo) { foreach (var elementValue in reportInfo.ElementValues.Values) { if (elementValue is ImageListElementValue imageListElementValue) { var fileImageValues = imageListElementValue.Value; if (fileImageValues != null) { foreach (var fileImage in fileImageValues) { if (fileImage is FileImageValue fileImageValue) { if (!string.IsNullOrEmpty(fileImageValue.Value) && !fileImageValue.Value.Equals(fileImageValue.ExamDataId)) { fileImageValue.ImageBuffer = new ByteBuffer(await GetFileAsync(fileImageValue.Value)); } else { WriteErrorLog($"GetFileAsync {fileImageValue.Value} error"); return null; } } } } } else if (elementValue is FileImageValue fileImageValue) { fileImageValue.ImageBuffer = new ByteBuffer(await GetFileAsync(fileImageValue.Value)); } } return reportInfo; } private async Task GetFileAsync(string token) { try { var buffer = await DownloadHelper.GetFileAsync(token, _fileCacheFolder, null, null, 10000); var data = new byte[0]; if (buffer is ByteBuffer byteBuffer) { data = byteBuffer.GetBytes(); } else if (buffer is FileBuffer fileBuffer) { data = fileBuffer.ReadBytes(0, fileBuffer.Size); fileBuffer.DeleteFile(); } return data; } catch (Exception e) { WriteErrorLog($"GetFileAsync {token} error:{e}"); return new byte[0]; } } private void WriteErrorLog(string content) { string errPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Error"); if (!Directory.Exists(errPath)) { Directory.CreateDirectory(errPath); } File.AppendAllText(Path.Combine(errPath, $"{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.log"),content); } } }