2014-10-27 66 views
0

我們在項目中使用Sitecore 6.5。如何使用item api創建sitecore中的媒體項目

在項目的其中一個站點中,用戶必須能夠將pdf/doc文件上傳到服務器。當他上傳時,這會被添加到Web數據庫中,因此我們必須將其傳輸到主數據庫。

我正在嘗試使用Sitecore的項目web api完成此任務。

我已經看過this post如何做到這一點。但我無法得到它的工作。

每當我執行我的請求時,我都會得到一個內部服務器錯誤,告訴我沒有找到所請求文檔的佈局。

生成的URL我是這樣的:

{host}/-/item/v1/?name=45c87793-4b37-40c8-acbc-a3b8f2b0c275&sc_itemid=653a9a07-6ea0-4e9a-8214-6bf3447096ed&sc_database=master&payload=min 

據我所知,我認爲URL是建立正確的。

執行GET請求不工作通過以下網址:

{host}/-/item/v1/?sc_itemid=653a9a07-6ea0-4e9a-8214-6bf3447096ed 

對我失去了我的任何想法?

編輯:

這裏是我如何給媒體打電話海報的代碼。

var mediaPoster = new MediaPoster("http://{host}/", @"sitecore\admin", "b"); 

if (pdfStream != null) 
    mediaPoster.PostMedia(item.Name, new Guid("{653A9A07-6EA0-4E9A-8214-6BF3447096ED}"), "master", new MemoryStream(pdfStream.ToArray()), ".pdf"); 
+0

嗨,你可以添加你調用mp.PostMedia的代碼?什麼是這個文件的擴展名。我看到你使用了guid作爲文件名,那是你的意圖嗎? – RobertoBr 2014-10-27 16:30:23

+0

嗨羅伯託,我已經添加了我稱之爲PostMedia功能的代碼。您可以在代碼示例中看到的擴展名是pdf。這是我的意圖使用一個GUID作爲文件名。 – JeremyVm 2014-10-28 07:19:50

回答

0

還驗證您的配置是否正確。要上傳文件,您需要設置安全性。

<site name="website"> 
    <patch:attribute name="itemwebapi.mode">StandardSecurity</patch:attribute> 
    <patch:attribute name="itemwebapi.access">ReadWrite</patch:attribute> 
    <patch:attribute name="itemwebapi.allowanonymousaccess">false</patch:attribute> 
    </site> 

我剛剛運行了一個測試,該配置就位,它的工作。

您可以創建一個控制檯應用程序,並與PostMedia類使用此代碼:

string HOST = @"http://HOST/"; 
string ParentID = "{3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1}";   //Must be media library folder/item. this is the root 
string mediaFileExt = ".pdf";          //you need to specify the extension. You can get that by the content-type returned or the way you find better. 

HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://sdn.sitecore.net/upload/sdn5/modules/sitecore%20item%20web%20api/sitecore_item_web_api_developer_guide_sc65-66-usletter.pdf"); 
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
Stream mediaStream = httpWebReponse.GetResponseStream(); 


//create a instance and inform the credentials as well the host 
MediaPost mp = new MediaPost(HOST, @"sitecore\admin", "b"); 

//post the media! 
//Important: It needs a Valid Item Name, 
//     a Valid Parent ID under Media Library, 
//     the database, the stream and the extension 
mp.PostMedia("DocumentName", new Guid(ParentID), "master", mediaStream, mediaFileExt); 

它應該工作,讓知道,如果你仍然收到這個錯誤...

UPDATE

你知道Sitecore中的showconfig.aspx嗎?你可以用它來查看你的配置文件如何被解析。 我建議你去那裏http://HOST/sitecore/admin/showconfig.aspx,搜索<sites>,看看你的網站是如何設置的。所有的修補程序屬性(模式,訪問,allowanonumousaccess)應該像上面的配置。

只要你的用戶是管理員,它應該有權訪問醫學圖書館和所有其他安全方面。

我剛想過的另一點。您是否爲Sitecore版本獲得了正確版本的Web Api模塊?

1.0

的Sitecore的項Web API模塊V1.0.0 rev.120828被釋放。
Sitecore項目Web API模塊已經過Sitecore CMS 6.5.0 rev.120706(Update-5)和CMS 6.6.0 rev.120918(初始版本)的測試。

1.2

的Sitecore的項Web API 1.2.0轉。 140128被釋放。
Sitecore項目Web API模塊已經過Sitecore CMS 6.6.0 rev的測試。 131211(6.6.0 Update-7)和7.1 rev。 140130(7.1更新-1)。

+0

嗨羅伯託。我忘了安裝包Sitecore.ItemWebApi ...(愚蠢..我知道..但我認爲這是沒有必要的,因爲檢索項目的工作。) 我已經安裝它,並得到一個不同的錯誤後,我已經設置你提供給我的配置選項。所以我想我可以從這裏繼續。 感謝您的回答! – JeremyVm 2014-10-28 10:48:43

+0

我繼續嘗試,並且仍然出現錯誤。更具體地說,該錯誤發生在以下類中:Sitecore.ItemWebApi.Pipelines.HttpRequest.CheckMode。顯然該模式設置爲關閉。雖然在我的.config文件中,我100%確定它設置爲StandardSecurity。即上面給出的選項。 – JeremyVm 2014-10-28 13:55:03

+0

我已經設法解決了上述問題。但現在我可以獲得一個OK狀態,但通過使用郵遞員,我可以看到實際給出的迴應如下:「訪問站點不被授予。」這很奇怪,因爲我正在使用管理員用戶。我已經嘗試了媒體庫本身和庫中的文件夾。 – JeremyVm 2014-10-28 15:24:10