Sitecore: Proxying MediaItem

За един от проектите наскоро имахме интересен казус – част от upload-натите файлове в Media Library-то на Sitecore трябваше да са достъпни за сваляне само от регистрирани потребители. Неприятното беше, че всъщност съдържанието на всеки от Item-ите в Media Library вече е достъпно чрез proxy, и едно от решенията беше писане на разширение за pipeline обектите. Другото решение беше написване на собствено proxy, което със сигурност ми харесва повече.
Подчертавам дебело, че това е първият ми ASP.NET модул изобщо, така че бъдете снизходителни. Решението (с махнати подробностите по проверка на достъпа) изглежда така:
Response.Clear(); Sitecore.Data.Database database = Sitecore.Configuration.Factory.GetDatabase("master"); Sitecore.Data.Items.MediaItem MediaFile = database.GetItem(ItemID); Stream fileStream = MediaFile.GetMediaStream(); Response.ContentType = MediaFile.MimeType; Response.AppendHeader("Content-Length", fileStream.Length.ToString()); Response.AppendHeader("Content-Disposition", "attachment; filename="+MediaFile.Name+"."+MediaFile.Extension); byte[] fileContent = BufferStream(fileStream,0); Response.BinaryWrite(fileContent);
BufferSream е собствен метод, който load-ва съдържанието на MediaStream-а преди да го представи на потребителя. Ето и какво представлява, всъщност:
public static byte[] BufferStream(Stream stream,int initialLength) { if (initialLength < 1) { initialLength = 32768; } byte[] buffer = new byte[initialLength]; int read=0; int chunk; while ((chunk = stream.Read(buffer,read,buffer.Length-read))>0) { read += chunk; if (read == buffer.Length) { int nextByte = stream.ReadByte(); if (nextByte==-1) { return buffer; } byte[] newBuffer = new byte[buffer.Length*2]; Array.Copy(buffer, newBuffer, buffer.Length); newBuffer[read]=(byte)nextByte; buffer = newBuffer; read++; } } byte[] ret = new byte[read]; Array.Copy(buffer, ret, read); return ret; }
Маркери: .net, sitecore
За тази статия
В момента четете "Sitecore: Proxying MediaItem", статия в stinger's thoughts
Отпечатване на статията
- Публикувана на:
- 17.02.2009 в 14:45
- Категория:
- Web Development
- Изпращане:
- Изпрати чрез email
Категории
- Books (10)
- Linux/UNIX (66)
- Movies (32)
- Music (70)
- Web Development (57)
- Други (180)






















IE8 Webslice
RSS с публикации
Няма коментари
RSS с коментaрите