使用MVC从SharePoint 2010文档库下载文档

时间:2012-12-18 15:40:14

标签: model-view-controller sharepoint sharepoint-2010 sharepointdocumentlibrary

您好我想在MVC视图中显示文档列表,并且能够在点击时下载它们。我自己尝试了一个解决方案,如下所示。我一直在努力解决这个问题,所以任何建议都会受到赞赏。

namespace SharePointMVC.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
            DefaultModel Lists = new DefaultModel();
            string siteURL = "http://MYSPSSITE";
            string documentListName = "MY DOCUMENT LIBRARY";
            ListItemCollection listItems = null;
            using (ClientContext clientContext = new ClientContext(siteURL))
            {
                List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);

                CamlQuery camlQuery = new CamlQuery(); ;
                camlQuery.ViewXml =
                    @"<View>

                     <Query>
                     <Where>
                     <Eq>
                     <FieldRef Name ='" + name + @"'/>

                     <Value Type ='" + type + "'>" + value + @"</Value>
                     </Eq>

                     </Where>
                     <RowLimit>" + rowLimit.ToString() + @"</RowLimit>

                     </Query>
                     </View>";

                listItems = documentsList.GetItems(camlQuery);

                clientContext.Load(documentsList);
                clientContext.Load(listItems);

                clientContext.ExecuteQuery();

            }

            return listItems;
        }

        private static ListItem GetDocumentFromSP(String documentName)
        {
            ListItemCollection listItems = GetListItemCollectionFromSP("FileLeafRef", documentName, "Text", 1);
            return (listItems != null && listItems.Count == 1) ? listItems[0] : null;
        }

        public Stream DownloadDocument(string SiteURL, string documentName)
        {
            ListItem item = GetDocumentFromSP(documentName);
            if (item != null)
            {
                using (ClientContext clientContext = new ClientContext(SiteUrl))
                {
                    FileInformation fileInformation = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, item["Outline.docx"].ToString());
                    return fileInformation.Stream;
                }
            }

            return null;
        }

1 个答案:

答案 0 :(得分:0)

如果您没有太多要求(例如,必须能够覆盖神奇的5000文档标记),您可以使用SPMetal并运行LINQ查询。请注意它有局限性,并且不如CAML查询那样高效,但它的工作原理完全相同。