0

指定されたテンプレートを使用してメディア アイテム (画像) をアップロードしようとしているので、アイテムの追加フィールド プロパティを利用できます。ただし、画像はアップロードされ、引き続きデフォルトの画像テンプレートが使用されます。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();
    }
}
4

2 に答える 2

0

考えられる方法の 1 つは、Web.config ファイルの「mediaTypes」ノードで「sharedTemplate」または「versionedTemplate」の設定を変更することです。さまざまなタイプのメディア ファイルと画像 (例: png、bmp、jpg) のエントリが見つかります。必要なすべてのファイル タイプのデフォルト テンプレートを変更する必要があります。

これは、Web.config ファイルを直接変更するのではなく、カスタム構成ファイルを変更する方法の例を示すトピックについて私が書いた投稿です。 https://sitecorecontextitem.wordpress.com/2012/12/12/custom-image-templates-in-sitecore/

于 2015-01-23T16:36:46.537 に答える
0

Sitecore アイテム WebAPI は、新しいメディア アイテムの作成中にテンプレートを指定することを許可しません。メソッドを使用MediaCreator.CreateFromStreamしますが、3 つのパラメーターしか取りません。

MediaManager.Creator.CreateFromStream(inputStream, filePath, options);

 ...

public virtual Item CreateFromStream(Stream stream, string filePath, MediaCreatorOptions options);

また、カスタム テンプレートを定義することはできません。

于 2015-01-26T14:00:17.957 に答える