Пример #1
0
        /// <summary>
        /// Moves current original image to history.
        /// </summary>
        /// <param name="originalImage">The current original image.</param>
        /// <returns>The archived image.</returns>
        public MediaImage MoveToHistory(MediaImage originalImage)
        {
            var clonnedOriginalImage = (MediaImage)originalImage.Clone();

            clonnedOriginalImage.Original = originalImage;

            var historicalFileName = MediaImageHelper.CreateHistoricalVersionedFileName(
                originalImage.OriginalFileName,
                originalImage.OriginalFileExtension);

            var folderName = Path.GetFileName(Path.GetDirectoryName(originalImage.FileUri.OriginalString));

            using (var originalFileStream = DownloadFileStream(clonnedOriginalImage.PublicUrl))
            {
                using (var originalThumbnailFileStream = DownloadFileStream(clonnedOriginalImage.PublicThumbnailUrl))
                {
                    mediaImageVersionPathService.SetPathForArchive(clonnedOriginalImage, folderName, historicalFileName);

                    unitOfWork.BeginTransaction();
                    repository.Save(clonnedOriginalImage);
                    unitOfWork.Commit();

                    StartTasksForImage(clonnedOriginalImage, originalFileStream, originalThumbnailFileStream, originalImage.IsEdited());
                }
            }
            return(clonnedOriginalImage);
        }
        /// <summary>
        /// Uploads the image.
        /// </summary>
        /// <param name="rootFolderId">The root folder id.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="fileLength">Length of the file.</param>
        /// <param name="fileStream">The file stream.</param>
        /// <param name="reuploadMediaId">The reupload media identifier.</param>
        /// <param name="overrideUrl">if set to <c>true</c> override URL.</param>
        /// <returns>
        /// Image entity.
        /// </returns>
        public MediaImage UploadImage(Guid rootFolderId, string fileName, long fileLength, Stream fileStream, Guid reuploadMediaId, bool overrideUrl = true)
        {
            overrideUrl = false; // TODO: temporary disabling feature #1055.
            using (var thumbnailFileStream = new MemoryStream())
            {
                MediaImage originalImage;
                string     folderName;
                string     publicFileName;

                fileStream = RotateImage(fileStream);
                var size = GetSize(fileStream);

                CreatePngThumbnail(fileStream, thumbnailFileStream, ThumbnailSize);

                if (!reuploadMediaId.HasDefaultValue())
                {
                    // Re-uploading image: Get original image, folder name, file extension, file name
                    originalImage = repository.First <MediaImage>(image => image.Id == reuploadMediaId);
                    folderName    = Path.GetFileName(Path.GetDirectoryName(originalImage.FileUri.OriginalString));
                    MediaImage clonedOriginalImage = (MediaImage)originalImage.Clone();
                    clonedOriginalImage.Original = originalImage;

                    // Get original file stream
                    using (var originalFileStream = DownloadFileStream(originalImage.PublicUrl))
                    {
                        // Get thumbnail file stream
                        using (var originalThumbnailFileStream = DownloadFileStream(originalImage.PublicThumbnailUrl))
                        {
                            // Check is re-uploaded image has the same extension as original
                            var reuploadedFileExtension = Path.GetExtension(fileName);
                            if (reuploadedFileExtension != null && !reuploadedFileExtension.Equals(originalImage.OriginalFileExtension))
                            {
                                fileStream = UpdateCodec(fileStream, originalFileStream);
                            }

                            // Create version file name for current original image
                            var historicalUrl = MediaImageHelper.CreateHistoricalVersionedFileName(
                                clonedOriginalImage.OriginalFileName,
                                clonedOriginalImage.OriginalFileExtension);

                            // Update urls with version file name
                            mediaImageVersionPathService.SetPathForArchive(clonedOriginalImage, folderName, historicalUrl);

                            unitOfWork.BeginTransaction();
                            repository.Save(clonedOriginalImage);
                            unitOfWork.Commit();

                            // Re-upload original and thumbnail images to version urls
                            StartTasksForImage(clonedOriginalImage, originalFileStream, originalThumbnailFileStream, originalImage.IsEdited());
                        }
                    }

                    UpdateImageProperties(originalImage, rootFolderId, originalImage.OriginalFileName, originalImage.OriginalFileExtension, originalImage.Title, size, fileLength,
                                          thumbnailFileStream.Length);

                    if (!overrideUrl)
                    {
                        publicFileName = MediaImageHelper.CreateVersionedFileName(originalImage.OriginalFileName, GetVersion(originalImage));
                        mediaImageVersionPathService.SetPathForNewOriginal(originalImage, folderName, publicFileName);
                    }
                }
                else
                {
                    // Uploading new image
                    folderName     = mediaFileService.CreateRandomFolderName();
                    publicFileName = MediaImageHelper.CreatePublicFileName(fileName, Path.GetExtension(fileName));

                    // Create new original image and upload file stream to the storage
                    originalImage = CreateImage(rootFolderId, fileName, Path.GetExtension(fileName), fileName, size, fileLength, thumbnailFileStream.Length);
                    mediaImageVersionPathService.SetPathForNewOriginal(originalImage, folderName, publicFileName);
                }

                unitOfWork.BeginTransaction();
                repository.Save(originalImage);
                unitOfWork.Commit();

                StartTasksForImage(originalImage, fileStream, thumbnailFileStream, false);

                return(originalImage);
            }
        }