Пример #1
0
        ///WARNING! Need enternet
        public async Task URLErrorUploadTest()
        {
            var cd    = Directory.GetCurrentDirectory();
            var model = new UploadImageURLModel
            {
                URL       = @"https://notfoundurl.nf/",
                Latitude  = 0,
                Longitude = 0,
                Scale     = 17
            };
            var ret = await MainControllerService.UploadImageFromURL(model, Guid.Empty);

            Assert.False(File.Exists(cd + "\\images\\101.bmp"));
            var expected = ("", 404, "Host_Not_found");

            Assert.Equal(expected.Item2, ret.Item2);
            Assert.Equal(expected.Item3, ret.Item3);
            Assert.Equal(expected.Item1.GetHashCode(), ret.Item1.GetHashCode());
            File.Delete(cd + "\\images\\101.bmp");
        }
Пример #2
0
        ///WARNING! Need enternet
        public async Task URLUploadTest()
        {
            var cd    = Directory.GetCurrentDirectory();
            var model = new UploadImageURLModel
            {
                URL       = @"https://www.google.com.ua/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
                Latitude  = 0,
                Longitude = 0,
                Scale     = 17
            };
            var ret = await MainControllerService.UploadImageFromURL(model, Guid.Empty);

            Assert.True(File.Exists(cd + "\\images\\101.bmp"));
            var expected = (new { resultImagePath = "\\images\\101.bmp" }, 200, "");

            Assert.Equal(expected.Item2, ret.Item2);
            Assert.Equal(expected.Item3, ret.Item3);
            Assert.Equal(expected.Item1.GetHashCode(), ret.Item1.GetHashCode());
            File.Delete(cd + "\\images\\101.bmp");
        }
Пример #3
0
 public async Task <IActionResult> UploadImageFromURL([FromBody] UploadImageURLModel model)
 {
     return(await Upload <UploadImageURLModel>(model));
 }
Пример #4
0
        /// <summary>
        /// Upload image from URL with longitude, lantitude and scale
        /// </summary>
        /// <param name="model">Model to upload</param>
        /// <returns>(result, state, message)</returns>
        public async Task <(object, int, string)> UploadImageFromURL(UploadImageURLModel model, Guid UserId)
        {
            if (!model.IsPreview)
            {
                ImageDBModel image = _applicationDBContext.Images.SingleOrDefault(img => img.URL == model.URL);
                if (image != null)
                {
                    image.Expires   = DateTime.Now + TimeSpan.FromDays(30);
                    image.Latitude  = model.Latitude;
                    image.IsPreview = false;
                    image.Longitude = model.Longitude;
                    image.Scale     = model.Scale;
                    await _applicationDBContext.SaveChangesAsync();

                    return(new
                    {
                        resultImagePath = model.URL
                    }, 200, "");
                }
                else
                {
                    //TODO: errors
                }
            }
            else
            {
                var filePath = _fileService.GetNextFilesPath(1, DirectoryType.Upload)[0];
                using (var client = new HttpClient())
                {
                    try
                    {
                        using (var result = await client.GetAsync(model.URL))
                        {
                            if (result.IsSuccessStatusCode)
                            {
                                if ((await result.Content.ReadAsStreamAsync()).TryConvertToImage(out Image img))
                                {
                                    img.Save(filePath, System.Drawing.Imaging.ImageFormat.Bmp);

                                    string       retUrl = filePath.Remove(0, filePath.LastIndexOf("\\images\\"));
                                    ImageDBModel image  = new ImageDBModel
                                    {
                                        Cells     = null,
                                        Expires   = DateTime.Now + TimeSpan.FromDays(1),
                                        IsPreview = model.IsPreview,
                                        Longitude = -1,
                                        Latitude  = -1,
                                        Scale     = -1,
                                        URL       = retUrl
                                    };
                                    if (UserId == Guid.Empty)
                                    {
                                        _applicationDBContext.Images.Add(image);
                                    }
                                    else
                                    {
                                        _applicationDBContext.Users.Find(UserId).DownloadedImages.Add(image);
                                    }

                                    await _applicationDBContext.SaveChangesAsync();

                                    return(new
                                    {
                                        resultImagePath = retUrl
                                    }, 200, "");
                                }
                                return("", 400, "File_Not_Image");
                            }
                        }
                    }
                    catch (HttpRequestException)
                    {
                        return("", 404, "Host_Not_found");
                    }
                }
            }
            return("", 404, "Unavailable_URL");
        }