partial void RandomImageClicked(NSButton sender) { var service = new RandomImageService(); Task.Run(async() => { BeginInvokeOnMainThread(() => { RandomImageButton.Enabled = false; RandomImageSpinner.Hidden = false; RandomImageSpinner.StartAnimation(this); }); var imageUrl = await service.GetRandomImage(); if (imageUrl != null) { var image = new NSImage(NSUrl.FromString(imageUrl.ToString())); BeginInvokeOnMainThread(() => ImageCell.Image = image); SetImage(image); } else { BeginInvokeOnMainThread(() => ErrorLabel.StringValue = "Error getting random image, try again"); } BeginInvokeOnMainThread(() => { RandomImageButton.Enabled = true; RandomImageSpinner.Hidden = true; RandomImageSpinner.StopAnimation(this); }); }); }
public async Task <IActionResult> GetRandomImage(string type) { int hour = DateTime.Now.Hour; lock (_fuseObj) { _fuseCount++; } string ext = null; if (string.IsNullOrEmpty(type)) { type = "动漫综合2"; } if (type.Equals("少女映画")) { string userHex = HttpContext.Session.GetString("_userId"); if (string.IsNullOrEmpty(userHex)) { //没登陆 return(Redirect("/Auth/login")); } } if (!_randomImageList.ContainsKey(type)) { _randomImageList.Add(type, new List <RandomImage>(size)); } RandomImage randomImage = RandomImageService.GetRandomImage(type); if (_randomImageList[type].Count < size) { randomImage = RandomImageService.GetRandomImage(type); if (random == null) { return(NotFound()); } _randomImageList[type].Add(randomImage); } else { if (DateTime.Now.Hour != _initTime) { _fuseCount = 0; _initTime = DateTime.Now.Hour; _randomImageList[type].Clear(); randomImage = RandomImageService.GetRandomImage(type); if (random == null) { return(NotFound()); } _randomImageList[type].Add(randomImage); } else { if (_fuseCount > _randomImageFuseSize) { Response.StatusCode = (int)HttpStatusCode.BadGateway; return(Content("接口并发太高,接口已经熔断")); } int index = random.Next(_randomImageList[type].Count - 1); randomImage = _randomImageList[type][index]; } } if (randomImage == null) { return(NotFound()); } ext = Path.GetExtension(randomImage.FileName); var headers = Request.Headers; StringBuilder stringBuilder = new StringBuilder(); foreach (var item in headers) { stringBuilder.Append(item.Key + "---" + item.Value + "\r\n"); } string RealIP = headers["X-Forwarded-For"].ToString().Split(",")[0]; AccessRecords accessRecords = new AccessRecords() { AccessId = SnowFlake_Net.GenerateSnowFlakeID(), IP = RealIP, X_Real_IP = headers["X-Real-IP"], X_Forwarded_For = headers["X-Forwarded-For"], Referrer = headers["Referer"], RequestHeader = stringBuilder.ToString(), AccessTime = DateTime.Now, UnixTime = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds, TimeInterval = -1, url = "/api/GetRandomImage" }; await AccessService.InsertAccessAsync(accessRecords).ConfigureAwait(false); type = randomImage.TypeNameMD5; upyun.secret = postgreSQLConfig.upyunSecret;; Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; unixTimestamp += 3; //开启token防盗链 if (postgreSQLConfig.token_anti_theft_chain) { string _upt = upyun.CreatToken(unixTimestamp.ToString(), upyun.secret, $"/upload/{type}/{randomImage.FileSHA1}{ext}"); return(Redirect($"https://upyun.morenote.top/upload/{type}/{randomImage.FileSHA1}{ext}?_upt={_upt}")); } else { return(Redirect($"https://upyun.morenote.top/upload/{type}/{randomImage.FileSHA1}{ext}")); } }
public RandomImagesDataViewModel(MainViewModel viewModel, RandomImageService service) : base(viewModel, service) { }
private async Task GetHttpWebRequestForAnYaAsync(string type) { string url = ""; if (type.Equals("少女映画")) { url = "https://api.r10086.com:8443/少女映画.php?password=20"; } else { url = $"https://api.r10086.com:8443/" + type + ".php"; } //建立请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //添加Referer信息 request.Headers.Add(HttpRequestHeader.Referer, "http://www.bz08.cn/"); //伪装成谷歌浏览器 //request.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"); request.Headers.Add(HttpRequestHeader.UserAgent, "I am a cute web crawler"); //添加cookie认证信息 Cookie cookie = new Cookie("PHPSESSID", "s9gajue8h7plf7n5ab8fehiuoq"); cookie.Domain = "api.r10086.com"; if (request.CookieContainer == null) { request.CookieContainer = new CookieContainer(); } request.CookieContainer.Add(cookie); //发送请求获取Http响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync().ConfigureAwait(false)); var originalString = response.ResponseUri.OriginalString; Console.WriteLine(originalString); //获取响应流 Stream receiveStream = response.GetResponseStream(); //获取响应流的长度 int length = (int)response.ContentLength; //读取到内存 MemoryStream stmMemory = new MemoryStream(); byte[] buffer1 = new byte[length]; int i; //将字节逐个放入到Byte 中 while ((i = receiveStream.Read(buffer1, 0, buffer1.Length)) > 0) { stmMemory.Write(buffer1, 0, i); } //写入磁盘 string name = System.IO.Path.GetFileName(originalString); byte[] imageBytes = stmMemory.ToArray(); string fileSHA1 = SHAEncrypt_Helper.Hash1Encrypt(imageBytes); //上传到又拍云 if (!RandomImageService.Exist(type, fileSHA1)) { upyun.writeFile($"/upload/{SHAEncrypt_Helper.MD5Encrypt(type)}/{fileSHA1}{Path.GetExtension(name)}", imageBytes, true); RandomImage randomImage = new RandomImage() { RandomImageId = SnowFlake_Net.GenerateSnowFlakeID(), TypeName = type, TypeNameMD5 = SHAEncrypt_Helper.MD5Encrypt(type), TypeNameSHA1 = SHAEncrypt_Helper.Hash1Encrypt(type), FileName = name, FileNameMD5 = SHAEncrypt_Helper.MD5Encrypt(name), FileNameSHA1 = SHAEncrypt_Helper.Hash1Encrypt(name), FileSHA1 = fileSHA1, Sex = false, }; //记录到数据库 await RandomImageService.InsertImageAsync(randomImage).ConfigureAwait(false); } //name = $"{dir}{dsc}upload{dsc}{type}{dsc}{name}"; //if (!Directory.Exists($"{dir}{dsc}upload{dsc}{type}")) //{ // Directory.CreateDirectory($"{dir}{dsc}upload{dsc}{type}"); //} //if (!System.IO.File.Exists(name)) //{ // FileStream file = new FileStream(name, FileMode.Create, FileAccess.ReadWrite); // file.Write(stmMemory.ToArray()); // file.Flush(); // file.Close(); //} //FileStream file = new FileStream("1.jpg",FileMode.Create, FileAccess.ReadWrite); //关闭流 stmMemory.Close(); receiveStream.Close(); response.Close(); }