protected void UpdateImageFile(MediaItem currentItem, byte[] responseData) { Media media = MediaManager.GetMedia(currentItem); Stream stream = new MemoryStream(responseData); try { if (!currentItem.InnerItem.InheritsFrom(ImageCompressionConstants.TemplateIDs.RelatedImageTemplateId)) { InjectTheNeededTemplate(currentItem); } Data.Fields.LinkField relatedField = media.MediaData.MediaItem.InnerItem.Fields[ImageCompressionConstants.ImageFields.RELATED_IMAGE_FIELD]; if (relatedField != null && relatedField.TargetItem != null) { var myMedia = new Data.Items.MediaItem(relatedField.TargetItem); var hiddenWebPMedia = new Media(new MediaData(myMedia)); hiddenWebPMedia.SetStream(stream, currentItem.Extension); } else { if (stream != null) { CreateNewMediaItemWithStreamAndLink(stream, currentItem, relatedField, media); } } } catch (Exception ex) { return; } // Sitecore may not be ready to accept this sort of image, but it still works despite this exception }
public Media DetermineImageResponse(HttpContext context, MediaRequest request, Media media) { Diagnostics.Assert.ArgumentNotNull(context, "context"); Diagnostics.Assert.ArgumentNotNull(request, "request"); Diagnostics.Assert.ArgumentNotNull(media, "media"); if (ShouldSkipWebProcessing(context)) { return(media); } // So why use a link field here ... Sitecore has a limitation on the default attachement field called Blob // You can only have one of these // So unfortunately you can't sore the WEBP and the JPEG binary data on the one Media Item in Sitecore. // At this stage the best way to do this for thie module is have two Media Items. Data.Fields.LinkField relatedField = media.MediaData.MediaItem.InnerItem.Fields["Related Compressed File"]; if (relatedField != null && relatedField.TargetItem != null) { var myMedia = new Data.Items.MediaItem(relatedField.TargetItem); media = new Media(new MediaData(myMedia)); } return(media); }