Пример #1
0
    /// <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);
        }
    }
Пример #2
0
    /// <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;
    }