Example #1
0
        /// <summary>
        /// 删除附件
        /// </summary>
        /// <param name="attachment">附件</param>
        public void Delete(ContentAttachment attachment)
        {
            DeleteStoredFile(attachment);
            EventBus <ContentAttachment> .Instance().OnBefore(attachment, new CommonEventArgs(EventOperationType.Instance().Delete()));

            contentAttachmentRepository.Delete(attachment);
            EventBus <ContentAttachment> .Instance().OnAfter(attachment, new CommonEventArgs(EventOperationType.Instance().Delete()));
        }
Example #2
0
        /// <summary>
        /// 删除附件
        /// </summary>
        /// <param name="attachmentId">附件Id</param>
        public void Delete(long attachmentId)
        {
            ContentAttachment attachment = Get(attachmentId);

            if (attachment != null)
            {
                Delete(attachment);
            }
        }
Example #3
0
        /// <summary>
        /// 附件重新调整售价(修改Price)
        /// </summary>
        /// <param name="attachmentId">附件Id</param>
        /// <param name="price">新售价</param>
        public void UpdatePrice(long attachmentId, int price)
        {
            ContentAttachment attachment = Get(attachmentId);

            if (attachment != null)
            {
                attachment.Price = price;
                contentAttachmentRepository.Update(attachment);
            }
        }
Example #4
0
        /// <summary>
        /// 附件重新命名(修改FriendlyFileName)
        /// </summary>
        /// <param name="attachmentId">附件Id</param>
        /// <param name="newFriendlyFileName">新附件名</param>
        public void Rename(long attachmentId, string newFriendlyFileName)
        {
            ContentAttachment attachment = Get(attachmentId);

            if (attachment != null)
            {
                attachment.FriendlyFileName = newFriendlyFileName;
                contentAttachmentRepository.Update(attachment);
            }
        }
Example #5
0
        /// <summary>
        /// 添加BBTag实体
        /// </summary>
        /// <param name="htmlTemplate">html模板</param>
        /// <param name="attachment">带替换附件</param>
        /// <returns></returns>
        private BBTag AddBBTag(string htmlTemplate, ContentAttachment attachment)
        {
            BBAttribute bbAttribute = new BBAttribute("attachTemplate", "",
                                                      n =>
            {
                return(string.Format(htmlTemplate,
                                     attachment.FriendlyFileName,
                                     attachment.FriendlyFileLength,
                                     attachment.DownloadCount,
                                     SiteUrls.Instance().ContentAttachmentUrl(attachment.AttachmentId)));
            },
                                                      HtmlEncodingMode.UnsafeDontEncode);

            return(new BBTag("attach:" + attachment.AttachmentId, "${attachTemplate}", "", false, BBTagClosingStyle.LeafElementWithoutContent, null, bbAttribute));
        }
Example #6
0
        /// <summary>
        /// 添加BBTag实体
        /// </summary>
        /// <param name="htmlTemplate">html模板</param>
        /// <param name="attachment">带替换附件</param>
        /// <returns></returns>
        private BBTag AddBBTag(string htmlTemplate, ContentAttachment attachment)
        {
            BBAttribute bbAttribute = new BBAttribute("attachTemplate", "",
                                                      n =>
                                                      {
                                                          return string.Format(htmlTemplate,
                                                                               attachment.FriendlyFileName,
                                                                               attachment.FriendlyFileLength,
                                                                               attachment.DownloadCount,
                                                                              SiteUrls.Instance().ContentAttachmentUrl(attachment.AttachmentId));
                                                      },
                                                      HtmlEncodingMode.UnsafeDontEncode);

            return new BBTag("attach:" + attachment.AttachmentId, "${attachTemplate}", "", false, BBTagClosingStyle.LeafElementWithoutContent, null, bbAttribute);
        }
Example #7
0
        /// <summary>
        /// 刪除附件
        /// </summary>
        public static bool CMS_DeleteContentAttachment(this Authorizer authorizer, ContentAttachment contentItem)
        {
            IUser currentUser = UserContext.CurrentUser;
            if (currentUser == null)
            {
                return false;
            }

            if (authorizer.IsAdministrator(CmsConfig.Instance().ApplicationId))
                return true;

            if (currentUser.UserId == contentItem.UserId)
                return true;

            return false;
        }
Example #8
0
        /// <summary>
        /// 附件下载的直连地址
        /// </summary>
        /// <param name="attachment">附件实体</param>
        /// <param name="enableClientCaching">是否缓存</param>
        /// <returns></returns>
        public static string ContentAttachmentDirectUrl(this SiteUrls siteUrls, ContentAttachment attachment, bool enableCaching = true)
        {
            if (attachment == null)
            {
                return(string.Empty);
            }
            IStoreProvider storeProvider  = DIContainer.Resolve <IStoreProvider>();
            string         attachmentPath = attachment.GetRelativePath() + "/" + attachment.FileName;

            if (enableCaching)
            {
                return(storeProvider.GetDirectlyUrl(attachmentPath));
            }
            else
            {
                return(storeProvider.GetDirectlyUrl(attachmentPath, DateTime.Now));
            }
        }
Example #9
0
        /// <summary>
        /// 创建附件
        /// </summary>
        /// <param name="attachment">附件</param>
        /// <param name="contentStream">文件流</param>
        public void Create(ContentAttachment attachment, Stream contentStream)
        {
            if (contentStream == null)
            {
                return;
            }

            StoreProvider.AddOrUpdateFile(attachment.GetRelativePath(), attachment.FileName, contentStream);

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

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

            contentAttachmentRepository.Insert(attachment);
            EventBus <ContentAttachment> .Instance().OnAfter(attachment, new CommonEventArgs(EventOperationType.Instance().Create()));
        }
Example #10
0
        /// <summary>
        /// 刪除附件
        /// </summary>
        public static bool CMS_DeleteContentAttachment(this Authorizer authorizer, ContentAttachment contentItem)
        {
            IUser currentUser = UserContext.CurrentUser;

            if (currentUser == null)
            {
                return(false);
            }

            if (authorizer.IsAdministrator(CmsConfig.Instance().ApplicationId))
            {
                return(true);
            }

            if (currentUser.UserId == contentItem.UserId)
            {
                return(true);
            }

            return(false);
        }
        public override void ProcessRequest(HttpContext context)
        {
            long attachmentId = context.Request.QueryString.Get <long>("attachmentId", 0);

            if (attachmentId <= 0)
            {
                WebUtility.Return404(context);
                return;
            }

            ContentAttachmentService contentAttachmentService = new ContentAttachmentService();
            ContentAttachment        attachment = contentAttachmentService.Get(attachmentId);

            if (attachment == null)
            {
                WebUtility.Return404(context);
                return;
            }

            IUser currentUser = UserContext.CurrentUser;

            //下载计数
            CountService countService = new CountService(TenantTypeIds.Instance().ContentAttachment());

            countService.ChangeCount(CountTypes.Instance().DownloadCount(), attachment.AttachmentId, attachment.UserId, 1, false);

            bool enableCaching = context.Request.QueryString.GetBool("enableCaching", true);

            context.Response.Status     = "302 Object Moved";
            context.Response.StatusCode = 302;

            LinktimelinessSettings linktimelinessSettings = DIContainer.Resolve <ISettingsManager <LinktimelinessSettings> >().Get();
            string token = Utility.EncryptTokenForAttachmentDownload(linktimelinessSettings.Highlinktimeliness, attachmentId);

            context.Response.Redirect(SiteUrls.Instance().ContentAttachmentTempUrl(attachment.AttachmentId, token, enableCaching), true);
            context.Response.Flush();
            context.Response.End();
        }
Example #12
0
 /// <summary>
 /// 附件下载的直连地址
 /// </summary>
 /// <param name="attachment">附件实体</param>
 /// <param name="enableClientCaching">是否缓存</param>
 /// <returns></returns>
 public static string ContentAttachmentDirectUrl(this SiteUrls siteUrls, ContentAttachment attachment, bool enableCaching = true)
 {
     if (attachment == null)
     {
         return string.Empty;
     }
     IStoreProvider storeProvider = DIContainer.Resolve<IStoreProvider>();
     string attachmentPath = attachment.GetRelativePath() + "/" + attachment.FileName;
     if (enableCaching)
     {
         return storeProvider.GetDirectlyUrl(attachmentPath);
     }
     else
     {
         return storeProvider.GetDirectlyUrl(attachmentPath, DateTime.Now);
     }
 }
        public override void ProcessRequest(HttpContext context)
        {
            long attachmentId = context.Request.QueryString.Get <long>("attachmentId", 0);

            if (attachmentId <= 0)
            {
                WebUtility.Return404(context);
                return;
            }

            //检查链接是否过期
            string token               = context.Request.QueryString.GetString("token", string.Empty);
            bool   isTimeout           = true;
            long   attachmentIdInToken = Utility.DecryptTokenForAttachmentDownload(token, out isTimeout);

            if (isTimeout || attachmentIdInToken != attachmentId)
            {
                WebUtility.Return403(context);
                return;
            }

            ContentAttachmentService contentAttachmentService = new ContentAttachmentService();
            ContentAttachment        attachment = contentAttachmentService.Get(attachmentId);

            if (attachment == null)
            {
                WebUtility.Return404(context);
                return;
            }


            bool     enableCaching = context.Request.QueryString.GetBool("enableCaching", true);
            DateTime lastModified  = attachment.DateCreated.ToUniversalTime();

            if (enableCaching && IsCacheOK(context, lastModified))
            {
                WebUtility.Return304(context);
                return;
            }

            //输出文件流
            IStoreFile storeFile = storeProvider.GetFile(attachment.GetRelativePath(), attachment.FileName);

            if (storeFile == null)
            {
                WebUtility.Return404(context);
                return;
            }

            context.Response.Clear();
            //context.Response.ClearHeaders();
            //context.Response.Cache.VaryByParams["attachmentId"] = true;
            string fileExtension    = attachment.FileName.Substring(attachment.FileName.LastIndexOf('.') + 1);
            string friendlyFileName = attachment.FriendlyFileName + (attachment.FriendlyFileName.EndsWith(fileExtension) ? "" : "." + fileExtension);

            SetResponsesDetails(context, attachment.ContentType, friendlyFileName, lastModified);

            DefaultStoreFile fileSystemFile = storeFile as DefaultStoreFile;

            if (!fileSystemFile.FullLocalPath.StartsWith(@"\"))
            {
                //本地文件下载
                context.Response.TransmitFile(fileSystemFile.FullLocalPath);
                context.Response.End();
            }
            else
            {
                context.Response.AddHeader("Content-Length", storeFile.Size.ToString("0"));
                context.Response.Buffer       = false;
                context.Response.BufferOutput = false;

                using (Stream stream = fileSystemFile.OpenReadStream())
                {
                    if (stream == null)
                    {
                        WebUtility.Return404(context);
                        return;
                    }
                    long   bufferLength = fileSystemFile.Size <= DownloadFileHandlerBase.BufferLength ? fileSystemFile.Size : DownloadFileHandlerBase.BufferLength;
                    byte[] buffer       = new byte[bufferLength];

                    int readedSize;
                    while ((readedSize = stream.Read(buffer, 0, (int)bufferLength)) > 0 && context.Response.IsClientConnected)
                    {
                        context.Response.OutputStream.Write(buffer, 0, readedSize);
                        context.Response.Flush();
                    }

                    stream.Close();
                }
                context.Response.End();
            }
        }
Example #14
0
 /// <summary>
 /// 获取直连URL
 /// </summary>
 /// <param name="attachment">附件</param>
 /// <returns>返回可以http直连该附件的url</returns>
 public string GetDirectlyUrl(ContentAttachment attachment)
 {
     return(StoreProvider.GetDirectlyUrl(attachment.GetRelativePath(), attachment.FileName));
 }
Example #15
0
 /// <summary>
 /// 删除文件系统中的文件
 /// </summary>
 /// <param name="attachment">附件</param>
 protected void DeleteStoredFile(ContentAttachment attachment)
 {
     StoreProvider.DeleteFile(attachment.GetRelativePath(), attachment.FileName);
 }