protected void Page_Load(object sender, EventArgs e) { userRepository = DependencyResolver.Current.GetService<IUserRepository>(); Response.ContentType = "text/plain"; int accountId; if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId)) { Logger.Error("Не корректно задан парамер accountId"); Response.BinaryWrite(GetErrorAvatar()); return; } if (!avatarSize.Contains(Request["size"].ToLower())) { Logger.Error("Не корректно задан парамер size"); Response.BinaryWrite(GetErrorAvatar()); return; } var user = userRepository.GetAccountOwner(accountId); if (user == null) { Logger.Error("Не найден пользователь-владелец счёта " + accountId); Response.BinaryWrite(GetErrorAvatar()); return; } dataSource = TradeSharpAccountStatistics.Instance.proxy; var userInfo = dataSource.GetUsersBriefInfo(new List<int> { user.ID }).FirstOrDefault(); if (userInfo == null) { Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login); Response.BinaryWrite(GetErrorAvatar()); return; } byte[] avatar; switch (Request["size"].ToLower()) { case "big": avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault(); break; case "small": avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarSmallFileName }).FirstOrDefault(); break; default: avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault(); break; } if (avatar == null) { Logger.Error("Не удалось получить файл"); Response.BinaryWrite(GetErrorAvatar()); return; } Response.BinaryWrite(avatar); }
// чтение файла из БД с обновлением кэша в случае необходимости private List <byte[]> GetFiles(List <string> names, List <string> hashCodes) { var fileDict = new Dictionary <string, byte[]>(); // forming request var requestNames = new List <string>(); for (var i = 0; i < names.Count; i++) { var name = names[i]; var hashCode = hashCodes[i]; if (name == null || hashCode == null) // при вызове из GetUsersInfo: на сервере файла не существует { try { if (!string.IsNullOrEmpty(name)) { File.Delete(path + "\\" + name); fileDict.Add(name, null); } } catch (Exception ex) { Logger.Info("UserInfoExCache.GetFiles: error deleting file " + path + "\\" + name, ex); } continue; } if (File.Exists(path + "\\" + name)) { var data = File.ReadAllBytes(path + "\\" + name); if (UserInfoEx.ComputeHash(data) == hashCode) { fileDict.Add(name, data); continue; } } requestNames.Add(name); } // requesting server var files = dataSource.ReadFiles(requestNames); if (files == null || files.Count != requestNames.Count) { Logger.Info("UserInfoExCache.GetFiles: server error"); return(null); } // saving to cache for (var i = 0; i < requestNames.Count; i++) { var name = requestNames[i]; var data = files[i]; try { File.WriteAllBytes(path + "\\" + name, data); } catch (Exception ex) { Logger.Info("UserInfoExCache.GetFiles: error writing cache " + path + "\\" + name, ex); } fileDict.Add(name, data); } return(names.Select(name => name == null ? null : fileDict[name]).ToList()); }
protected void Page_Load(object sender, EventArgs e) { userRepository = DependencyResolver.Current.GetService <IUserRepository>(); Response.ContentType = "text/plain"; int accountId; if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId)) { Logger.Error("Не корректно задан парамер accountId"); Response.BinaryWrite(GetErrorAvatar()); return; } if (!avatarSize.Contains(Request["size"].ToLower())) { Logger.Error("Не корректно задан парамер size"); Response.BinaryWrite(GetErrorAvatar()); return; } var user = userRepository.GetAccountOwner(accountId); if (user == null) { Logger.Error("Не найден пользователь-владелец счёта " + accountId); Response.BinaryWrite(GetErrorAvatar()); return; } dataSource = TradeSharpAccountStatistics.Instance.proxy; var userInfo = dataSource.GetUsersBriefInfo(new List <int> { user.ID }).FirstOrDefault(); if (userInfo == null) { Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login); Response.BinaryWrite(GetErrorAvatar()); return; } byte[] avatar; switch (Request["size"].ToLower()) { case "big": avatar = dataSource.ReadFiles(new List <string> { userInfo.AvatarBigFileName }).FirstOrDefault(); break; case "small": avatar = dataSource.ReadFiles(new List <string> { userInfo.AvatarSmallFileName }).FirstOrDefault(); break; default: avatar = dataSource.ReadFiles(new List <string> { userInfo.AvatarBigFileName }).FirstOrDefault(); break; } if (avatar == null) { Logger.Error("Не удалось получить файл"); Response.BinaryWrite(GetErrorAvatar()); return; } Response.BinaryWrite(avatar); }