Sitecore - Item Media API-Upload Media Media с шаблоном
Я пытаюсь загрузить элемент мультимедиа (изображение), используя указанный шаблон, чтобы я мог использовать некоторые дополнительные свойства поля элемента. Тем не менее, изображение загружается и продолжает использовать шаблон изображения по умолчанию. Fiddler также не показывает никаких ошибок.
Что я делаю неправильно? Какие-либо предложения? Вот фрагмент кода:
public void PostPicture(string itemName, Guid parentId, string databaseName, Stream fileStream, string fileExtension)
{
string url = String.Format("{0}/-/item/v1?", this.Host.TrimEnd('/'));
string imageTemplate = "{0E49E3DF-69C2-4F4B-9513-F078EA0013B2}";
url += String.Format("name={0}&template={1}&sc_itemid={2}&sc_database={3}&payload=content&language=en"
, HttpUtility.UrlEncode(itemName)
, HttpUtility.UrlEncode(imageTemplate)
, HttpUtility.UrlEncode(parentId.ToString())
, HttpUtility.UrlEncode(databaseName));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = true;
request.Headers.Add("X-Scitemwebapi-Username", this.Username);
request.Headers.Add("X-Scitemwebapi-Password", this.Password);
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
string boundary = "---------------------------" + DateTime.Now.ToString("yyyyMMddHHmmssfff", System.Globalization.CultureInfo.InvariantCulture);
byte[] boundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
request.ContentType = "multipart/form-data; boundary=" + boundary;
using (Stream stream = request.GetRequestStream())
{
stream.Write(boundaryBytes, 0, boundaryBytes.Length);
string header = "Content-Disposition: form-data; name=\"file\"; filename=\"" + itemName + fileExtension + "\"\r\nContent-Type: multipart/form-data\r\n\r\n";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(header);
stream.Write(bytes, 0, bytes.Length);
byte[] buffer = new byte[32768];
int bytesRead;
if (stream != null)
{
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
stream.Write(buffer, 0, bytesRead);
}
}
byte[] end = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
stream.Write(end, 0, end.Length);
stream.Close();
}
var response = (HttpWebResponse)request.GetResponse();
}
}
2 ответа
Одним из возможных подходов является изменение настроек "sharedTemplate" и / или "versionedTemplate" в узле "mediaTypes" файла Web.config. Вы найдете записи для различных типов медиа-файлов и изображений (например, PNG, BMP, JPG), и вы должны изменить шаблон по умолчанию для всех необходимых типов файлов.
Вот пост, который я написал по теме, который покажет вам пример того, как вносить изменения в пользовательский файл конфигурации, а не прямо в файл Web.config. https://sitecorecontextitem.wordpress.com/2012/12/12/custom-image-templates-in-sitecore/
Элемент Sitecore WebAPI не позволяет указывать шаблон при создании новых элементов мультимедиа. Оно использует MediaCreator.CreateFromStream
Метод, в то время как принимает только 3 параметра:
MediaManager.Creator.CreateFromStream(inputStream, filePath, options);
...
public virtual Item CreateFromStream(Stream stream, string filePath, MediaCreatorOptions options);
И ни один из них не позволяет вам определить свой пользовательский шаблон.