/// <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())); }
/// <summary> /// 删除附件 /// </summary> /// <param name="attachmentId">附件Id</param> public void Delete(long attachmentId) { ContentAttachment attachment = Get(attachmentId); if (attachment != null) { Delete(attachment); } }
/// <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); } }
/// <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); } }
/// <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)); }
/// <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); }
/// <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; }
/// <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)); } }
/// <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())); }
/// <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(); }
/// <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(); } }
/// <summary> /// 获取直连URL /// </summary> /// <param name="attachment">附件</param> /// <returns>返回可以http直连该附件的url</returns> public string GetDirectlyUrl(ContentAttachment attachment) { return(StoreProvider.GetDirectlyUrl(attachment.GetRelativePath(), attachment.FileName)); }
/// <summary> /// 删除文件系统中的文件 /// </summary> /// <param name="attachment">附件</param> protected void DeleteStoredFile(ContentAttachment attachment) { StoreProvider.DeleteFile(attachment.GetRelativePath(), attachment.FileName); }