public byte[] GetBinaryByUrl(string url) { string encodedUrl = HttpUtility.UrlPathEncode(url); // ?? why here? why now? IList metas = null; BinaryMeta binaryMeta = null; if (this.PublicationId == 0) { metas = BinaryMetaFactory.GetMetaByUrl(encodedUrl); if (metas.Count == 0) { throw new BinaryNotFoundException(); } binaryMeta = metas[0] as BinaryMeta; } else { binaryMeta = BinaryMetaFactory.GetMetaByUrl(this.PublicationId, encodedUrl); if (binaryMeta == null) { throw new BinaryNotFoundException(); } } TcmUri uri = new TcmUri(binaryMeta.PublicationId, binaryMeta.Id, 16, 0); Tridion.ContentDelivery.DynamicContent.BinaryFactory factory = new BinaryFactory(); BinaryData binaryData = string.IsNullOrEmpty(binaryMeta.VariantId) ? factory.GetBinary(uri.ToString()) : factory.GetBinary(uri.ToString(), binaryMeta.VariantId); return(binaryData == null ? null : binaryData.Bytes); }
/// <summary> /// Gets the cached local file for a given URL path. /// </summary> /// <param name="urlPath">The URL path.</param> /// <param name="localization">The Localization.</param> /// <returns>The path to the local file.</returns> internal string GetCachedFile(string urlPath, Localization localization) { string baseDir = AppDomain.CurrentDomain.BaseDirectory; string localFilePath = $"{baseDir}/{localization.BinaryCacheFolder}/{urlPath}"; using (new Tracer(urlPath, localization, localFilePath)) { Dimensions dimensions; urlPath = StripDimensions(urlPath, out dimensions); string publicationUri = localization.GetCmUri(); DateTime lastPublishedDate = SiteConfiguration.CacheProvider.GetOrAdd( urlPath, CacheRegions.BinaryPublishDate, () => GetBinaryLastPublishDate(urlPath, publicationUri) ); if (lastPublishedDate != DateTime.MinValue) { if (File.Exists(localFilePath)) { if (localization.LastRefresh.CompareTo(lastPublishedDate) < 0) { //File has been modified since last application start but we don't care Log.Debug("Binary with URL '{0}' is modified, but only since last application restart, so no action required", urlPath); return(localFilePath); } FileInfo fi = new FileInfo(localFilePath); if (fi.Length > 0) { DateTime fileModifiedDate = File.GetLastWriteTime(localFilePath); if (fileModifiedDate.CompareTo(lastPublishedDate) >= 0) { Log.Debug("Binary with URL '{0}' is still up to date, no action required", urlPath); return(localFilePath); } } } } // Binary does not exist or cached binary is out-of-date BinaryMeta binaryMeta = GetBinaryMeta(urlPath, publicationUri); if (binaryMeta == null) { // Binary does not exist in Tridion, it should be removed from the local file system too if (File.Exists(localFilePath)) { CleanupLocalFile(localFilePath); } throw new DxaItemNotFoundException(urlPath, localization.Id); } BinaryFactory binaryFactory = new BinaryFactory(); BinaryData binaryData = binaryFactory.GetBinary(GetPublicationId(publicationUri), binaryMeta.Id, binaryMeta.VariantId); WriteBinaryToFile(binaryData.Bytes, localFilePath, dimensions); return(localFilePath); } }
public Tuple <byte[], string> GetBinary(ILocalization localization, int binaryId) { BinaryMeta binaryMeta = GetBinaryMeta(localization, binaryId); if (binaryMeta == null) { throw new DxaItemNotFoundException(binaryId.ToString(), localization.Id); } BinaryFactory binaryFactory = new BinaryFactory(); BinaryData binaryData = binaryFactory.GetBinary(int.Parse(localization.Id), binaryMeta.Id, binaryMeta.VariantId); return(new Tuple <byte[], string>(binaryData.Bytes, binaryMeta.Path)); }
private static DateTime GetBinaryLastPublishDate(string urlPath, string publicationUri) { BinaryMeta binaryMeta = GetBinaryMeta(urlPath, publicationUri); if (binaryMeta == null || !binaryMeta.IsComponent) { return(DateTime.MinValue); } ComponentMetaFactory componentMetaFactory = new ComponentMetaFactory(publicationUri); IComponentMeta componentMeta = componentMetaFactory.GetMeta(binaryMeta.Id); return(componentMeta.LastPublicationDate); }
public DateTime GetBinaryLastPublishedDate(ILocalization localization, int binaryId) { BinaryMeta binaryMeta = GetBinaryMeta(localization, binaryId); if (binaryMeta == null || !binaryMeta.IsComponent) { return(DateTime.MinValue); } ComponentMetaFactory componentMetaFactory = new ComponentMetaFactory(int.Parse(localization.Id)); IComponentMeta componentMeta = componentMetaFactory.GetMeta(binaryMeta.Id); return(componentMeta.LastPublicationDate); }
public Tuple <byte[], string> GetBinary(ILocalization localization, string urlPath) { // Binary does not exist or cached binary is out-of-date BinaryMeta binaryMeta = GetBinaryMeta(localization, urlPath); if (binaryMeta == null) { throw new DxaItemNotFoundException(urlPath, localization.Id); } BinaryFactory binaryFactory = new BinaryFactory(); BinaryData binaryData = binaryFactory.GetBinary(int.Parse(localization.Id), binaryMeta.Id, binaryMeta.VariantId); return(new Tuple <byte[], string>(binaryData.Bytes, binaryMeta.Path)); }
protected ZipItem GetZipItem(string itemId, Localization localization) { BinaryMetaFactory binaryMetaFactory = new BinaryMetaFactory(); BinaryMeta binaryMeta = binaryMetaFactory.GetMeta("tcm:" + localization.Id + "-" + itemId); if (binaryMeta != null) { var item = SiteConfiguration.ContentProvider.GetStaticContentItem(binaryMeta.UrlPath, localization); return(new ZipItem { ContentItem = item, UrlPath = binaryMeta.UrlPath, LocalFileName = GetBinaryLocalFileName(binaryMeta.UrlPath, localization) }); } return(null); }
/// <summary> /// Gets the cached local file for a given binary Id. /// </summary> /// <param name="binaryId">The binary Id.</param> /// <param name="localization">The Localization.</param> /// <returns>The path to the local file.</returns> internal string GetCachedFile(int binaryId, ILocalization localization) { string baseDir = AppDomain.CurrentDomain.BaseDirectory; string localFilePath = $"{baseDir}/{localization.BinaryCacheFolder}"; using (new Tracer(binaryId, localization, localFilePath)) { string publicationUri = localization.GetCmUri(); if (!localization.IsXpmEnabled) { try { string[] files = Directory.GetFiles(localFilePath, $"{binaryId}_*", SearchOption.TopDirectoryOnly); if (files.Length > 0) { localFilePath = files[0]; if (IsCached(() => GetBinaryLastPublishDate(binaryId, localization), localFilePath, localization)) { return(localFilePath); } } } catch (Exception) { // Our binary cache folder probably doesn't exist. } } // Binary does not exist or cached binary is out-of-date BinaryMeta binaryMeta = GetBinaryMeta(binaryId, localization); if (binaryMeta == null) { throw new DxaItemNotFoundException(binaryId.ToString(), localization.Id); } BinaryFactory binaryFactory = new BinaryFactory(); BinaryData binaryData = binaryFactory.GetBinary(GetPublicationId(publicationUri), binaryMeta.Id, binaryMeta.VariantId); string ext = Path.GetExtension(binaryMeta.Path) ?? ""; localFilePath = $"{localFilePath}/{localization.Id}-{binaryId}{ext}"; WriteBinaryToFile(binaryData.Bytes, localFilePath, null); return(localFilePath); } }
/// <summary> /// Gets the cached local file for a given URL path. /// </summary> /// <param name="urlPath">The URL path.</param> /// <param name="localization">The Localization.</param> /// <returns>The path to the local file.</returns> internal string GetCachedFile(string urlPath, ILocalization localization) { string baseDir = AppDomain.CurrentDomain.BaseDirectory; string localFilePath = $"{baseDir}/{urlPath}"; if (File.Exists(localFilePath)) { // If our resource exists on the filesystem we can assume static content that is // manually added to web application. return(localFilePath); } // Attempt cache location with fallback to retrieval from CIL. Note we don't check cache // when running under XPM localFilePath = $"{baseDir}/{localization.BinaryCacheFolder}/{urlPath}"; using (new Tracer(urlPath, localization, localFilePath)) { Dimensions dimensions; urlPath = StripDimensions(urlPath, out dimensions); string publicationUri = localization.GetCmUri(); if (!localization.IsXpmEnabled && File.Exists(localFilePath)) { if (IsCached(() => GetBinaryLastPublishDate(urlPath, publicationUri), localFilePath, localization)) { return(localFilePath); } } // Binary does not exist or cached binary is out-of-date BinaryMeta binaryMeta = GetBinaryMeta(urlPath, publicationUri); if (binaryMeta == null) { throw new DxaItemNotFoundException(urlPath, localization.Id); } BinaryFactory binaryFactory = new BinaryFactory(); BinaryData binaryData = binaryFactory.GetBinary(GetPublicationId(publicationUri), binaryMeta.Id, binaryMeta.VariantId); WriteBinaryToFile(binaryData.Bytes, localFilePath, dimensions); return(localFilePath); } }
public DateTime GetLastPublishedDateByUrl(string url) { string encodedUrl = HttpUtility.UrlPathEncode(url); // ?? why here? why now? BinaryMeta binaryMeta = null; if (this.PublicationId == 0) { IList metas = BinaryMetaFactory.GetMetaByUrl(encodedUrl); if (metas.Count == 0) { return(DateTime.MinValue.AddSeconds(1)); // TODO: use nullable type } binaryMeta = metas[0] as BinaryMeta; } else { binaryMeta = BinaryMetaFactory.GetMetaByUrl(this.PublicationId, encodedUrl); } Tridion.ContentDelivery.Meta.IComponentMeta componentMeta = GetTridionComponentMetaFactory(binaryMeta.PublicationId).GetMeta(binaryMeta.Id); return(componentMeta == null ? DateTime.MinValue : componentMeta.LastPublicationDate); }