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);
                });
            });
        }
Example #2
0
        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();
        }