예제 #1
0
        public async Task <IActionResult> FindEntryMedia(Guid entryId,
                                                         [FromHeader(Name = "If-Match")] string ifMatch,
                                                         [FromHeader(Name = "Content-Disposition")] string contentDisposition)
        {
            if (string.IsNullOrWhiteSpace(ifMatch))
            {
                return(NotFound());
            }

            ifMatch = ifMatch.Replace("\"", string.Empty);
            string     fileName = HeaderUtilityHelper.TryGetContentDispositionFileName(contentDisposition);
            EntryMedia result   = string.IsNullOrWhiteSpace(fileName)
                ? await _mediaSearchStrategy.Find(entryId, ifMatch)
                : await _mediaSearchStrategy.Find(entryId, ifMatch, fileName);


            if (result == null)
            {
                return(NotFound());
            }

            return(NoContent());
        }
        public async Task <EntryMedia> PersistArticleEntryMediaAsync(ArticleEntryMediaRequest entryMediaRequest)
        {
            if (entryMediaRequest == null)
            {
                throw new ArgumentNullException(nameof(entryMediaRequest));
            }

            var searchTask = _searchStrategy.Find(entryMediaRequest.EntryId, entryMediaRequest.MD5Base64Hash);

            var articleEntryMedia = await _createEntryMediaCoordinator.CreateArticleEntryMedia(entryMediaRequest);

            if (articleEntryMedia != null)
            {
                var existingMediaMatch = await searchTask;

                return(existingMediaMatch != null ?
                       await StoreBlobUriAndMarkUploadSuccess(articleEntryMedia, StringUtilities.FromBase64(existingMediaMatch.BlobUrl))
                    : await UploadMediaContent(entryMediaRequest, articleEntryMedia));
            }

            return(articleEntryMedia);
        }