public async Task <HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) { logger?.Info($"{nameof(ImageProxyService)}-{nameof(GetImageResponse)}-{url}"); int type = 0; var i = url.IndexOf(image_type_param_name, StringComparison.OrdinalIgnoreCase); if (i > 0) { try { var p = url.Substring(i + image_type_param_name.Length).Trim('=').Trim(); url = url.Substring(0, i - 1);//减去一个连接符 int.TryParse(p, out type); } catch (Exception ex) { logger?.Error(ex.ToString()); } } var key = WebUtility.UrlEncode(url); var cache_file = Path.Combine(appPaths.GetImageCachePath().ToString(), key); byte[] bytes = null; //尝试从缓存中读取 try { var fi = fileSystem.GetFileInfo(cache_file); //图片文件存在,且是24小时之内的 if (fi.Exists && fileSystem.GetFileInfo(cache_file).LastWriteTimeUtc > DateTime.Now.AddDays(-1).ToUniversalTime()) { bytes = await fileSystem.ReadAllBytesAsync(cache_file); logger?.Info($"{nameof(ImageProxyService)}: Hit image cache {url} {cache_file}"); if (type == 1) { var ci = await CutImage(bytes); if (ci != null) { return(ci); } } fileExtensionContentTypeProvider.TryGetContentType(url, out var contentType); return(new HttpResponseInfo() { Content = new MemoryStream(bytes), ContentLength = bytes.Length, ContentType = contentType ?? "image/jpeg", StatusCode = HttpStatusCode.OK, }); } } catch (Exception ex) { logger?.Warn($"{nameof(ImageProxyService)}: Read image cache error. {url} {cache_file} {ex.Message}"); } try { var resp = await client.GetAsync(url, cancellationToken); if (resp.IsSuccessStatusCode == false) { return(await Parse(resp)); } try { fileSystem.WriteAllBytes(cache_file, await resp.Content.ReadAsByteArrayAsync()); logger?.Info($"{nameof(ImageProxyService)}: Save image cache {url} {cache_file} "); } catch (Exception ex) { logger?.Warn($"{nameof(ImageProxyService)}: Save image cache error. {url} {cache_file} {ex.Message}"); } if (type == 1) { var ci = await CutImage(await resp.Content.ReadAsByteArrayAsync()); if (ci != null) { return(ci); } } return(await Parse(resp)); } catch (Exception ex) { logger?.Error(ex.ToString()); } return(new HttpResponseInfo()); }
public async Task <HttpResponseInfo> GetImageResponse(string url, ImageType type, CancellationToken cancellationToken) { logger?.Info($"{nameof(GetImageResponse)}-{url}"); var key = WebUtility.UrlEncode(url); var cache_file = Path.Combine(appPaths.GetImageCachePath().ToString(), key); byte[] bytes = null; //尝试从缓存中读取 try { var fi = fileSystem.GetFileInfo(cache_file); //图片文件存在,且是24小时之内的 if (fi.Exists && fileSystem.GetFileInfo(cache_file).LastWriteTimeUtc > DateTime.Now.AddDays(-1).ToUniversalTime()) { bytes = await fileSystem.ReadAllBytesAsync(cache_file); logger?.Info($"Hit image cache {url} {cache_file}"); fileExtensionContentTypeProvider.TryGetContentType(url, out var contentType); return(new HttpResponseInfo() { Content = new MemoryStream(bytes), ContentLength = bytes.Length, ContentType = contentType ?? "image/jpeg", StatusCode = HttpStatusCode.OK, }); } } catch (Exception ex) { logger?.Warn($"Read image cache error. {url} {cache_file} {ex.Message}"); } try { var resp = await client.GetAsync(url, cancellationToken); if (resp.IsSuccessStatusCode == false) { return(await Parse(resp)); } try { fileSystem.WriteAllBytes(cache_file, await resp.Content.ReadAsByteArrayAsync()); logger?.Info($"Save image cache {url} {cache_file} "); } catch (Exception ex) { logger?.Warn($"Save image cache error. {url} {cache_file} {ex.Message}"); } return(await Parse(resp)); } catch (Exception ex) { logger?.Error(ex.ToString()); } return(new HttpResponseInfo()); }
/// <summary> /// 获取图片 /// </summary> /// <param name="url">地址</param> /// <param name="type">类型</param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <HttpResponseInfo> GetImageResponse(string url, ImageType type, CancellationToken cancellationToken) { // /emby/Plugins/JavScraper/Image?url=&type=xx if (url.IndexOf("Plugins/JavScraper/Image", StringComparison.OrdinalIgnoreCase) >= 0) //本地的链接 { var uri = new Uri(url); var q = HttpUtility.ParseQueryString(uri.Query); var url2 = q["url"]; if (url2.IsWebUrl()) { url = url2; var tt = q.Get("type"); if (!string.IsNullOrWhiteSpace(tt) && Enum.TryParse <ImageType>(tt.Trim(), out var t2)) { type = t2; } } } logger?.Info($"{nameof(GetImageResponse)}-{url}"); var key = WebUtility.UrlEncode(url); var cache_file = Path.Combine(appPaths.GetImageCachePath().ToString(), key); byte[] bytes = null; //尝试从缓存中读取 try { var fi = fileSystem.GetFileInfo(cache_file); //图片文件存在,且是24小时之内的 if (fi.Exists && fileSystem.GetFileInfo(cache_file).LastWriteTimeUtc > DateTime.Now.AddDays(-1).ToUniversalTime()) { bytes = await fileSystem.ReadAllBytesAsync(cache_file); logger?.Info($"Hit image cache {url} {cache_file}"); if (type == ImageType.Primary) { var ci = await CutImage(bytes, url); if (ci != null) { return(ci); } } fileExtensionContentTypeProvider.TryGetContentType(url, out var contentType); return(new HttpResponseInfo() { Content = new MemoryStream(bytes), ContentLength = bytes.Length, ContentType = contentType ?? "image/jpeg", StatusCode = HttpStatusCode.OK, }); } } catch (Exception ex) { logger?.Warn($"Read image cache error. {url} {cache_file} {ex.Message}"); } try { var resp = await client.GetAsync(url, cancellationToken); if (resp.IsSuccessStatusCode == false) { return(await Parse(resp)); } try { fileSystem.WriteAllBytes(cache_file, await resp.Content.ReadAsByteArrayAsync()); logger?.Info($"Save image cache {url} {cache_file} "); } catch (Exception ex) { logger?.Warn($"Save image cache error. {url} {cache_file} {ex.Message}"); } if (type == ImageType.Primary) { var ci = await CutImage(await resp.Content.ReadAsByteArrayAsync(), url); if (ci != null) { return(ci); } } return(await Parse(resp)); } catch (Exception ex) { logger?.Error(ex.ToString()); } return(new HttpResponseInfo()); }