If you implement a separate server for Content Management Server (CM) and the Content Delivery Server (CD), it is advised that you disable the file based media storage so that CD can retrieve the image information.
The following code shows how to update the existing file based media to database storage, from it you could create a Sitecore app to make a handy tool to update your existing media files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
protected void ButtonReattachMediaFilesClick(object sender, EventArgs e) { try { literalFiles.Text = string.Empty; var mediaLibraryItemId = new ID(textMediaLibraryItemId.Text.Trim()); var mediaItems = GetMediaFilesThatNeedToBeReattached(mediaLibraryItemId); var tempMediaFolderPath = HttpContext.Current.Server.MapPath("/temp-media"); var directoryInfo = new DirectoryInfo(tempMediaFolderPath); if (!directoryInfo.Exists) { directoryInfo.Create(); } var database = Database.GetDatabase("master"); var sb = new StringBuilder(); foreach (var mediaItem in mediaItems) { var filePath = HttpContext.Current.Server.MapPath(mediaItem.FilePath); var fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { using (var fileStream = fileInfo.Open(FileMode.Open)) { var mediaCreator = new MediaCreator(); var mediaItemFullPath = "/sitecore/media library" + mediaItem.MediaPath; var mediaCreatorOptions = new MediaCreatorOptions { Database = database, Language = Sitecore.Context.Language, Versioned = false, Destination = mediaItemFullPath, FileBased = false, IncludeExtensionInItemName = false, AlternateText = mediaItem.Name }; var item = mediaCreator.AttachStreamToMediaItem(fileStream, mediaItemFullPath, mediaItem.Name, mediaCreatorOptions); if (item != null) { item.ChangeTemplate(mediaItem.InnerItem.Template); item.Editing.BeginEdit(); if (item.Fields["Extension"] != null) { item.Fields["Extension"].Value = mediaItem.Extension; } if (item.Fields["Alt"] != null) { item.Fields["Alt"].Value = mediaItem.Alt; } if (item.Fields["Height"] != null) { item.Fields["Height"].Value = mediaItem.InnerItem.Fields["Height"].Value; } if (item.Fields["Width"] != null) { item.Fields["Width"].Value = mediaItem.InnerItem.Fields["Width"].Value; } if (item.Fields["Mime Type"] != null) { item.Fields["Mime Type"].Value = mediaItem.InnerItem.Fields["Mime Type"].Value; } if (item.Fields["Dimensions"] != null) { item.Fields["Dimensions"].Value = mediaItem.InnerItem.Fields["Dimensions"].Value; } item.Editing.EndEdit(); } sb.AppendFormat("{0} - reattached <br/>", mediaItem.Path); } } } directoryInfo.Delete(true); literalFiles.Text = sb.ToString(); } catch (Exception ex) { var sb = new StringBuilder(); sb.AppendLine(ex.Message); sb.AppendLine(ex.StackTrace); literalFiles.Text = sb.ToString(); } } private IEnumerable<MediaItem> GetMediaFilesThatNeedToBeReattached(ID mediaLibraryItemId) { var mediaLibraryItem = _database.GetItem(mediaLibraryItemId); var descendants = mediaLibraryItem.Axes.GetDescendants(); var mediaTemplateIds = new List<ID>(); mediaTemplateIds.Add(new ID("{D56DB3AA-7373-4651-837E-8D3977A0B544}")); //audio mediaTemplateIds.Add(new ID("{16692733-9A61-45E6-B0D4-4C0C06F8DD3C}")); //doc mediaTemplateIds.Add(new ID("{777F0C76-D712-46EA-9F40-371ACDA18A1C}")); //document mediaTemplateIds.Add(new ID("{7BB0411F-50CD-4C21-AD8F-1FCDE7C3AFFE}")); //docx mediaTemplateIds.Add(new ID("{962B53C4-F93B-4DF9-9821-415C867B8903}")); //file mediaTemplateIds.Add(new ID("{9867C0B9-A7BE-4D96-AD7E-4AD18109ED20}")); //flash mediaTemplateIds.Add(new ID("{F1828A2C-7E5D-4BBD-98CA-320474871548}")); //image mediaTemplateIds.Add(new ID("{DAF085E8-602E-43A6-8299-038FF171349F}")); //jpeg mediaTemplateIds.Add(new ID("{E76ADBDF-87D1-4FCB-BA71-274F7DBF5670}")); //movie mediaTemplateIds.Add(new ID("{B60424A5-CE06-4C2E-9F49-A6D732F55D4B}")); //mp3 mediaTemplateIds.Add(new ID("{0603F166-35B8-469F-8123-E8D87BEDC171}")); //pdf mediaTemplateIds.Add(new ID("{4F4A3A3B-239F-4988-98E1-DA3779749CBC}")); //zip var result = new List<MediaItem>(); foreach (var descendant in descendants) { if (!mediaTemplateIds.Contains(descendant.TemplateID)) { continue; } var mediaItem = new MediaItem(descendant); var media = MediaManager.GetMedia(mediaItem); var mediaData = media.MediaData; if (!mediaData.HasContent && mediaItem.FileBased) { result.Add(mediaItem); } } return result; } |