예제 #1
0
        /// <summary>
        ///     Saves the image by URL.
        /// </summary>
        /// <param name="externalUrl">The external URL.</param>
        /// <param name="container">The container.</param>
        /// <returns>Task{System.String}.</returns>
        public async Task <OperationResult> SaveImageByUrl(string externalUrl, BlobContainer container)
        {
            var info = BlobInfo.GetInfoByUrl(externalUrl);

            var uniqueName = GetUniqueImageName(info.Extension);

            var webRequest = WebRequest.Create(externalUrl);

            using (var response = await webRequest.GetResponseAsync())
            {
                using (var content = response.GetResponseStream())
                {
                    if (content == null)
                    {
                        return(new OperationResult(
                                   OperationResultStatus.Warning,
                                   "Content of specified source is empty"));
                    }

                    var contentType = response.ContentType;

                    var manager = GetManager(container);
                    if (manager == null)
                    {
                        return(new OperationResult(OperationResultStatus.Warning, "Incorrect input"));
                    }

                    var url = await manager.AddBlockBlob(uniqueName, content, contentType);

                    return(new OperationResult(OperationResultStatus.Success, url));
                }
            }
        }
예제 #2
0
        private async Task ProcessMissions(IImageProvider imageProvider, DeveloperHelper helper, StringBuilder sb)
        {
            var missionReference = helper.GetTableReference(AzureTableName.Missions);
            var missions         = await missionReference.ExecuteQueryAsync(new TableQuery <MissionAzure>());

            var missionsForUpdate =
                missions.Where(
                    m =>
                    m.RowKey == AzureTableConstants.MissionRowKey &&
                    BlobInfo.GetInfoByUrl(m.PhotoUrl).Kind == BlobKind.External);

            foreach (var missionAzure in missionsForUpdate)
            {
                var imageResult = await imageProvider.SaveImageByUrl(missionAzure.PhotoUrl, BlobContainer.MissionImages);

                if (imageResult.Status != OperationResultStatus.Success)
                {
                    sb.AppendLine(string.Format(MissionTemplate, missionAzure.Name, missionAzure.Id, imageResult.Description));
                    continue;
                }

                missionAzure.PhotoUrl = imageResult.Description;
                TableOperation updateOperation = TableOperation.Replace(missionAzure);
                var            result          = await missionReference.ExecuteAsync(updateOperation);

                if (!result.HttpStatusCode.EnsureSuccessStatusCode())
                {
                    sb.AppendLine(string.Format(MissionTemplate, missionAzure.Name, missionAzure.Id, result.HttpStatusCode));
                }
            }
        }
예제 #3
0
        /// <summary>
        ///     Deletes the image.
        /// </summary>
        /// <param name="photoUrl">The photo URL.</param>
        /// <returns>Task{System.Boolean}.</returns>
        public async Task <bool> DeleteImage(string photoUrl)
        {
            var info    = BlobInfo.GetInfoByUrl(photoUrl);
            var manager = GetManager(info.Container);

            if (manager == null)
            {
                return(false);
            }

            return(await manager.DeleteBlob(info.FullName));
        }
예제 #4
0
        /// <summary>
        /// Deletes the images.
        /// </summary>
        /// <param name="photoUrls">The photo urls.</param>
        /// <returns>Task{System.Boolean}.</returns>
        public async Task <bool> DeleteImages(IEnumerable <string> photoUrls)
        {
            if (!photoUrls.AnyValues())
            {
                return(true);
            }
            var succededTasks = new List <Task <bool> >();

            foreach (var photoUrl in photoUrls)
            {
                var info    = BlobInfo.GetInfoByUrl(photoUrl);
                var manager = GetManager(info.Container);
                if (manager == null)
                {
                    return(false);
                }

                succededTasks.Add(manager.DeleteBlob(info.FullName));
            }

            var results = await Task.WhenAll(succededTasks);

            return(results.All(result => result));
        }