/// <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)); } } }
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)); } } }
/// <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)); }
/// <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)); }