2014-10-27 108 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

相关问题