/// <summary> /// Saves modified image data. /// </summary> /// <param name="name">Image name</param> /// <param name="extension">Image extension</param> /// <param name="mimetype">Image mimetype</param> /// <param name="title">Image title</param> /// <param name="description">Image description</param> /// <param name="binary">Image binary data</param> /// <param name="width">Image width</param> /// <param name="height">Image height</param> private void SaveImage(string name, string extension, string mimetype, string title, string description, byte[] binary, int width, int height) { // Process media file if (mfi == null) { mfi = MediaFileInfo.Provider.Get(mediafileGuid, SiteInfoProvider.GetSiteID(CurrentSiteName)); } if (mfi == null) { return; } var mli = MediaLibraryInfo.Provider.Get(mfi.FileLibraryID); if (mli == null) { return; } string path = Path.GetDirectoryName(DirectoryHelper.CombinePath(MediaLibraryInfoProvider.GetMediaLibraryFolderPath(mli.LibraryID), mfi.FilePath)); bool permissionsOK = DirectoryHelper.CheckPermissions(path, false, true, true, true); // Check file write permissions FileInfo file = FileInfo.New(MediaFileInfoProvider.GetMediaFilePath(mfi.FileLibraryID, mfi.FilePath)); if (file != null) { permissionsOK = permissionsOK && !file.IsReadOnly; } if (!permissionsOK) { baseImageEditor.ShowError(GetString("img.errors.filesystempermissions")); SavingFailed = true; return; } MediaFileInfo originalMfi = mfi.Clone(true); try { var site = SiteInfo.Provider.Get(mfi.FileSiteID); if (site == null) { throw new NullReferenceException("Site of media file not specified."); } // Ensure object version SynchronizationHelper.EnsureObjectVersion(mfi); if (isPreview && !String.IsNullOrEmpty(PreviewPath)) { // Save preview file only if it was modified if (binary != null) { string previewExt = !String.IsNullOrEmpty(extension) && (extension != OldPreviewExt) ? extension : OldPreviewExt; string previewName = Path.GetFileNameWithoutExtension(PreviewPath); string previewFolder = Path.EnsureForwardSlashes(DirectoryHelper.CombinePath(Path.GetDirectoryName(mfi.FilePath).TrimEnd('/'), MediaLibraryHelper.GetMediaFileHiddenFolder(site.SiteName))); // Delete old preview files with thumbnails MediaFileInfoProvider.DeleteMediaFilePreview(SiteContext.CurrentSiteName, mli.LibraryID, mfi.FilePath); MediaFileInfoProvider.DeleteMediaFilePreviewThumbnails(mfi); // Save preview file MediaFileInfoProvider.SaveFileToDisk(site.SiteName, mli.LibraryFolder, previewFolder, previewName, previewExt, mfi.FileGUID, binary, false, false); SynchronizationHelper.LogObjectChange(mfi, TaskTypeEnum.UpdateObject); } } else { if (!String.IsNullOrEmpty(mimetype)) { mfi.FileMimeType = mimetype; } mfi.FileTitle = title; mfi.FileDescription = description; if (width > 0) { mfi.FileImageWidth = width; } if (height > 0) { mfi.FileImageHeight = height; } if (binary != null) { mfi.FileBinary = binary; mfi.FileSize = binary.Length; } string newExt = null; string newName = null; if (!String.IsNullOrEmpty(extension)) { newExt = extension; } if (!String.IsNullOrEmpty(name)) { newName = name; } // If file name or extension changed move preview file and remove all ald thumbnails if (NameOrExtensionWasModified(newName, newExt)) { string fileName = (newName ?? mfi.FileName); string fileExt = (newExt ?? mfi.FileExtension); string newPath = MediaFileInfoProvider.GetMediaFilePath(mfi.FileLibraryID, DirectoryHelper.CombinePath(Path.GetDirectoryName(mfi.FilePath), fileName) + fileExt); // Rename file only if file with same name does not exsists if (File.Exists(newPath)) { baseImageEditor.ShowError(GetString("img.errors.fileexists")); SavingFailed = true; return; } // Ensure max length of file path if (newPath.Length >= 260) { throw new IOExceptions.PathTooLongException(); } // Remove old thumbnails MediaFileInfoProvider.DeleteMediaFileThumbnails(mfi); MediaFileInfoProvider.DeleteMediaFilePreviewThumbnails(mfi); // Move media file MediaFileInfoProvider.MoveMediaFile(site.SiteName, mli.LibraryID, mfi.FilePath, DirectoryHelper.CombinePath(Path.GetDirectoryName(mfi.FilePath), fileName) + fileExt); // Set new file name or extension mfi.FileName = fileName; mfi.FileExtension = fileExt; mfi.FileMimeType = MimeTypeHelper.GetMimetype(fileExt); // Ensure new binary if (binary != null) { mfi.FileBinary = binary; mfi.FileSize = binary.Length; } } else { // Remove original media file before save if the image was modified if (binary != null) { // Remove old thumbnails MediaFileInfoProvider.DeleteMediaFileThumbnails(mfi); string filePath = MediaFileInfoProvider.GetMediaFilePath(mfi.FileLibraryID, mfi.FilePath); if (File.Exists(filePath)) { File.Delete(filePath); } } } // Save new data mfi.EnsureUniqueFileName(false); MediaFileInfo.Provider.Set(mfi); } } catch (Exception e) { // Log exception Service.Resolve <IEventLogService>().LogException("ImageEditor", "Save file", e); baseImageEditor.ShowError(GetString("img.errors.processing"), tooltipText: e.Message); SavingFailed = true; // Save original media file info originalMfi.EnsureUniqueFileName(false); MediaFileInfo.Provider.Set(originalMfi); } }
/// <summary> /// Save title and description of media file info. /// </summary> /// <param name="fileName">File name</param> /// <param name="title">Title</param> /// <param name="description">Description</param> private bool metaDataEditor_Save(string fileName, string title, string description) { bool saved = false; if (mediaFileInfo != null) { try { if (mediaFileInfo.FileName != fileName) { // Get original file path string extension = mediaFileInfo.FileExtension; // New file path string newPath = DirectoryHelper.CombinePath(Path.GetDirectoryName(mediaFileInfo.FilePath), fileName + extension); string newFullPath = MediaFileInfoProvider.GetMediaFilePath(mediaFileInfo.FileLibraryID, newPath); string newExtension = Path.GetExtension(newPath); if (!String.IsNullOrEmpty(newExtension)) { newExtension = newExtension.TrimStart('.'); } if (!MediaLibraryHelper.IsExtensionAllowed(newExtension)) { // New extension is not allowed metaDataEditor.ShowError(GetString("dialogs.filesystem.NotAllowedExtension").Replace("%%extensions%%", MediaLibraryHelper.GetAllowedExtensions(SiteName).TrimEnd(';').Replace(";", ", "))); return false; } // Rename file if (!File.Exists(newFullPath)) { MediaFileInfoProvider.MoveMediaFile(SiteName, mediaFileInfo.FileLibraryID, mediaFileInfo.FilePath, newPath); // Move preview file if exists if (MediaLibraryHelper.HasPreview(SiteName, mediaFileInfo.FileLibraryID, mediaFileInfo.FilePath)) { MediaLibraryHelper.MoveMediaFilePreview(mediaFileInfo, fileName + extension); } } else { // File already exists. metaDataEditor.ShowError(GetString("img.errors.fileexists")); return false; } mediaFileInfo.FileName = fileName; string subFolderPath = null; int lastSlash = mediaFileInfo.FilePath.LastIndexOfCSafe('/'); if (lastSlash > 0) { subFolderPath = mediaFileInfo.FilePath.Substring(0, lastSlash); } if (!string.IsNullOrEmpty(subFolderPath)) { mediaFileInfo.FilePath = String.Format("{0}/{1}{2}", subFolderPath, fileName, extension); } else { mediaFileInfo.FilePath = fileName + extension; } } mediaFileInfo.FileTitle = title; mediaFileInfo.FileDescription = description; // Save new data mediaFileInfo.EnsureUniqueFileName(false); MediaFileInfo.Provider.Set(mediaFileInfo); saved = true; } catch (Exception ex) { metaDataEditor.ShowError(GetString("metadata.errors.processing")); Service.Resolve<IEventLogService>().LogException("Metadata editor", "SAVE", ex); } } return saved; }