using System;
using Shared;
using HDL_ON;
using HDL_ON.UI.CSS;
using HDL_ON.DAL.Server;
using HDL_ON.UI;
using System.Threading;
using HDL_ON.Entity;
namespace HDL_ON
{
///
/// ImageUtlis
/// 图片下载处理
///
public class ImageUtlis
{
///
/// 用户头像
///
public const string HEADIMAGE = "HeadImage.png";
#region ■ 变量声明___________________________
///
/// 通用方法
///
private static ImageUtlis m_Current = null;
///
/// 通用方法
///
public static ImageUtlis Current
{
get
{
if (m_Current == null)
{
m_Current = new ImageUtlis();
}
return m_Current;
}
}
#endregion
#region 房间、场景 图片上传和下载
///
/// 上传图片
///
public string UploadImage(UploadImageObj uploadImageObj)
{
var requestJson = HttpUtil.GetSignRequestJson(uploadImageObj);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_UploadImage, requestJson);
if(revertObj.Code == StateCode.SUCCESS)
{
if(revertObj.Data != null)
{
return revertObj.Data.ToString();
}
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
}
return "";
}
///
/// 通过图片路径下载图片
///
public byte[] GetImageDownloadUrl(string imageKey)
{
var requestJson = HttpUtil.GetSignRequestJson(new GetImageUrlObj()
{
imageKey = imageKey,
});
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_GetImageUrl, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
if (revertObj.Data != null)
{
if (!string.IsNullOrEmpty(revertObj.Data.ToString()))
{
var url = revertObj.Data.ToString();
return HttpUtil.HttpsDownload(url);
}
}
}
return null;
}
///
/// 2020-12-03
/// 检测加载图片
/// 该方法目前只适用于房间和场景的背景图片
///
/// 图片路径、云端下载图片的标识key
/// 需要显示图片的ImageView
/// 是否需要忽略缓存
public void LoadLocalOrNetworkImages(string imageKey, ImageView imageView, bool ignoreCache = false)
{
try
{
//1.本地默认图库图片,直接加载本地
if (imageKey.Contains("Classification/Room/Roombg") || imageKey.Contains("Intelligence/Gallery/scenebg"))
{
if (imageView != null)
{
imageView.ImageBytes = null;
imageView.ImagePath = imageKey;
Utlis.WriteLine("imageKey 加载本地图片成功");
}
}
else
{
//2.自定义图片,检测是否本地缓存过,没有则云端下载然后缓存
if (!ignoreCache && FileUtils.Exists(imageKey))
{
//2.1 本地有缓存并且不忽略缓存,直接本地读取
if (imageView != null)
{
imageView.ImageBytes = FileUtils.ReadFile(imageKey);
Utlis.WriteLine("imageKey 加载自定义缓存图片成功");
}
}
else
{
//2.2 本地没缓存,开启线程云端下载然后缓存
System.Threading.Tasks.Task.Run(() =>
{
byte[] imageBytes = GetImageDownloadUrl(imageKey);
if (imageBytes != null)
{
FileUtils.WriteFileByBytes(imageKey, imageBytes);
//2.3 下载成功,显示并缓存本地
Application.RunOnMainThread(() =>
{
if (imageView != null)
{
imageView.ImageBytes = imageBytes;
Utlis.WriteLine("imageKey 加载云端下载图片成功");
}
});
}
else
{
//2.4 下载是否,是否使用默认图片
Utlis.WriteLine("imageKey 加载云端图片失败");
}
});
}
}
}
catch (Exception ex)
{
Utlis.WriteLine("imageKey 加载图片异常 catch");
}
finally
{
}
}
///
/// 2020-12-03
/// 检测加载图片
/// 该方法目前只适用于房间和场景的背景图片
///
/// 图片路径、云端下载图片的标识key
/// 需要显示图片的FrameLayout
/// 是否需要忽略缓存
public void LoadLocalOrNetworkImages(string imageKey, FrameLayout frameLayout, bool ignoreCache = false)
{
try
{
//1.本地默认图库图片,直接加载本地
if (imageKey.Contains("Classification/Room/Roombg") || imageKey.Contains("Intelligence/Gallery/scenebg"))
{
if (frameLayout != null)
{
//imageView.ImageBytes = null;
frameLayout.BackgroundImagePath = imageKey;
Utlis.WriteLine("imageKey 加载本地图片成功");
}
}
else
{
//2.自定义图片,检测是否本地缓存过,没有则云端下载然后缓存
if (!ignoreCache && FileUtils.Exists(imageKey))
{
//2.1 本地有缓存并且不忽略缓存,直接本地读取
if (frameLayout != null)
{
frameLayout.BackgroundImagePath = imageKey;
Utlis.WriteLine("imageKey 加载自定义缓存图片成功");
}
}
else
{
//2.2 本地没缓存,开启线程云端下载然后缓存
System.Threading.Tasks.Task.Run(() =>
{
byte[] imageBytes = GetImageDownloadUrl(imageKey);
if (imageBytes != null)
{
FileUtils.WriteFileByBytes(imageKey, imageBytes);
//2.3 下载成功,显示并缓存本地
Application.RunOnMainThread(() =>
{
if (frameLayout != null)
{
frameLayout.BackgroundImagePath = imageKey;
Utlis.WriteLine("imageKey 加载云端下载图片成功");
}
});
}
else
{
//2.4 下载是否,是否使用默认图片
Utlis.WriteLine("imageKey 加载云端图片失败");
}
});
}
}
}
catch (Exception ex)
{
Utlis.WriteLine("imageKey 加载图片异常 catch");
}
finally
{
}
}
///
/// 获取拼接用户头像的ImageKey规则
///
///
public string GetHeadImageKey(string userId)
{
return "ON" + "_" + userId + "_" + HEADIMAGE;
}
///
/// 生成头像上传规则参数
///
///
public UploadImageObj GetHeadImageUploadKeyObj(string userId)
{
return new UploadImageObj()
{
prefix = "ON",
uid = userId,
fileName = HEADIMAGE,
};
}
///
/// 下载用户头像
///
///
/// 是否忽略缓存
///
public byte[] DownHeadImage(string userId, bool ignoreCache = false)
{
try
{
var imageKey = GetHeadImageKey(userId);
byte[] imageBytes;
if (!ignoreCache && FileUtils.Exists(imageKey))
{
//本地有缓存
imageBytes = FileUtils.ReadFile(imageKey);
}
else
{
//云端下载
imageBytes = GetImageDownloadUrl(imageKey);
if(imageBytes != null)
{
//保存到本地
FileUtils.WriteFileByBytes(imageKey, imageBytes);
}
}
return imageBytes;
}
catch
{
return null;
}
}
#endregion
}
}