Beispiel #1
0
        /// <summary>
        /// 删除垃圾临时附件
        /// </summary>
        public void DeleteTrashTemporaryAttachments()
        {
            IAttachmentSettingsManager attachmentSettingsManager = DIContainer.Resolve <IAttachmentSettingsManager>();

            if (attachmentSettingsManager == null)
            {
                return;
            }
            AttachmentSettings attachmentSettings = attachmentSettingsManager.Get();
            int temporaryAttachmentStorageDay     = attachmentSettings.TemporaryAttachmentStorageDay;

            if (temporaryAttachmentStorageDay < 1)
            {
                temporaryAttachmentStorageDay = 1;
            }
            IEnumerable <T> attachments = attachmentRepository.GetTrashTemporaryAttachments(temporaryAttachmentStorageDay);

            if (attachments.Count() == 0)
            {
                return;
            }
            foreach (var attachment in attachments)
            {
                DeleteStoredFile(attachment);
            }
            attachmentRepository.DeleteTrashTemporaryAttachments(temporaryAttachmentStorageDay);
        }
Beispiel #2
0
        /// <summary>
        /// 创建附件
        /// </summary>
        /// <param name="attachment">附件</param>
        /// <param name="contentStream">文件流</param>
        public void Create(T attachment, Stream contentStream)
        {
            if (contentStream == null)
            {
                return;
            }

            if (attachment.MediaType == MediaType.Image)
            {
                //检查是否需要缩放原图
                if (TenantAttachmentSettings.MaxImageWidth > 0 || TenantAttachmentSettings.MaxImageHeight > 0)
                {
                    int maxWidth  = TenantAttachmentSettings.MaxImageWidth > 0 ? TenantAttachmentSettings.MaxImageWidth : attachment.Width;
                    int maxHeight = TenantAttachmentSettings.MaxImageHeight > 0 ? TenantAttachmentSettings.MaxImageHeight : attachment.Height;

                    if (attachment.Width > maxWidth || attachment.Height > maxHeight)
                    {
                        Stream resizedStream = ImageProcessor.Resize(contentStream, maxWidth, maxHeight, ResizeMethod.KeepAspectRatio);
                        if (resizedStream != contentStream)
                        {
                            contentStream.Dispose();
                        }
                        contentStream = resizedStream;
                    }
                }

                IAttachmentSettingsManager attachmentSettingsManager = DIContainer.Resolve <IAttachmentSettingsManager>();
                AttachmentSettings         attachmentSettings        = attachmentSettingsManager.Get();

                Image image = Image.FromStream(contentStream);
                bool  isGif = ImageProcessor.IsGIFAnimation(image);

                //检查是否需要打水印
                if (!isGif && TenantAttachmentSettings.EnableWatermark && attachmentSettings.WatermarkSettings.WatermarkType != WatermarkType.None && image.Width >= attachmentSettings.WatermarkSettings.WatermarkMinWidth && image.Height >= attachmentSettings.WatermarkSettings.WatermarkMinHeight)
                {
                    ImageProcessor imageProcessor = new ImageProcessor();

                    if (attachmentSettings.WatermarkSettings.WatermarkType == WatermarkType.Text)
                    {
                        TextWatermarkFilter watermarkFilter = new TextWatermarkFilter(attachmentSettings.WatermarkSettings.WatermarkText, attachmentSettings.WatermarkSettings.WatermarkLocation, attachmentSettings.WatermarkSettings.WatermarkOpacity);
                        imageProcessor.Filters.Add(watermarkFilter);
                    }
                    else if (attachmentSettings.WatermarkSettings.WatermarkType == WatermarkType.Image)
                    {
                        ImageWatermarkFilter watermarkFilter = new ImageWatermarkFilter(attachmentSettings.WatermarkSettings.WatermarkImagePhysicalPath, attachmentSettings.WatermarkSettings.WatermarkLocation, attachmentSettings.WatermarkSettings.WatermarkOpacity);
                        imageProcessor.Filters.Add(watermarkFilter);
                    }

                    //如果需要添加水印,则除水印图片以外,还需要保留原图
                    StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), attachment.GetOriginalFileName(), contentStream);

                    //给原始尺寸的图添加水印
                    using (Stream watermarkImageStream = imageProcessor.Process(contentStream))
                    {
                        StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), attachment.FileName, watermarkImageStream);
                    }

                    //根据设置生成不同尺寸的图片,并添加水印
                    if (TenantAttachmentSettings.ImageSizeTypes != null && TenantAttachmentSettings.ImageSizeTypes.Count > 0)
                    {
                        foreach (var imageSizeType in TenantAttachmentSettings.ImageSizeTypes)
                        {
                            Stream resizedStream = ImageProcessor.Resize(contentStream, imageSizeType.Size.Width, imageSizeType.Size.Height, imageSizeType.ResizeMethod);
                            image = Image.FromStream(resizedStream);
                            if (image.Width >= attachmentSettings.WatermarkSettings.WatermarkMinWidth && image.Height >= attachmentSettings.WatermarkSettings.WatermarkMinHeight)
                            {
                                using (Stream watermarkImageStream = imageProcessor.Process(resizedStream))
                                {
                                    StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), StoreProvider.GetSizeImageName(attachment.FileName, imageSizeType.Size, imageSizeType.ResizeMethod), watermarkImageStream);
                                }
                            }
                            else
                            {
                                StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), StoreProvider.GetSizeImageName(attachment.FileName, imageSizeType.Size, imageSizeType.ResizeMethod), resizedStream);
                            }

                            if (resizedStream != contentStream)
                            {
                                resizedStream.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), attachment.FileName, contentStream);

                    if (!isGif)
                    {
                        //根据设置生成不同尺寸的图片
                        if (TenantAttachmentSettings.ImageSizeTypes != null && TenantAttachmentSettings.ImageSizeTypes.Count > 0)
                        {
                            foreach (var imageSizeType in TenantAttachmentSettings.ImageSizeTypes)
                            {
                                Stream resizedStream = ImageProcessor.Resize(contentStream, imageSizeType.Size.Width, imageSizeType.Size.Height, imageSizeType.ResizeMethod);
                                StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), StoreProvider.GetSizeImageName(attachment.FileName, imageSizeType.Size, imageSizeType.ResizeMethod), resizedStream);
                                if (resizedStream != contentStream)
                                {
                                    resizedStream.Dispose();
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), attachment.FileName, contentStream);
            }

            if (contentStream != null)
            {
                contentStream.Dispose();
            }

            EventBus <T> .Instance().OnBefore(attachment, new CommonEventArgs(EventOperationType.Instance().Create()));

            attachmentRepository.Insert(attachment);
            EventBus <T> .Instance().OnAfter(attachment, new CommonEventArgs(EventOperationType.Instance().Create()));
        }