web-dev-qa-db-ja.com

クライアントサイドオブジェクトモデルからドキュメントをSharePointリストにアップロードする

.NET(C#)のクライアントサイドオブジェクトモデルを使用して、SharePointリストまたはフォルダーにドキュメントをアップロードする必要があります。これを行う最良の方法は何ですか?

要件は次のとおりです。

  • メタデータ値を設定する

  • ファイルサイズに制限はありません

  • リストビューのしきい値を超えるライブラリで動作する必要があります

23
Martijn Boeker

Sharepoint Document Libraryにドキュメントをアップロードするには、クライアントオブジェクトモデルで次の機能を使用します。

public void UploadDocument(string siteURL, string documentListName, string documentListURL, string documentName, byte[] documentStream)
{
    using (ClientContext clientContext = new ClientContext(siteURL))
    {
        //Get Document List
        List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);

        var fileCreationInformation = new FileCreationInformation();
        //Assign to content byte[] i.e. documentStream

        fileCreationInformation.Content = documentStream;
        //Allow owerwrite of document

        fileCreationInformation.Overwrite = true;
        //Upload URL

        fileCreationInformation.Url = siteURL + documentListURL + documentName;
        Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(
            fileCreationInformation);

        //Update the metadata for a field having name "DocType"
        uploadFile.ListItemAllFields["DocType"] = "Favourites";

        uploadFile.ListItemAllFields.Update();
        clientContext.ExecuteQuery();
    }
}

次のリンクも参考になります1) http://blogs.msdn.com/b/sridhara/archive/2010/03/12/uploading-files-using-client-object-model-in-sharepoint -2010.aspx

2) http://msdn.Microsoft.com/en-us/library/ee956524.aspx

3) http://www.codeproject.com/Articles/103503/How-to-upload-download-a-document-in-SharePoint-2

20
Rony SP

別の方法は、SaveBinaryDirectメソッドを使用することです。 SaveBinaryDirectメソッドは、ファイルのアップロードとダウンロードにWebベースの分散オーサリングとバージョン管理(WebDAV)を使用します。独自のカスタムWCFサービスを構築することなく、WebDAVはファイルをアップロードおよびダウンロードする最も効率的な方法です。

using (FileStream fs = new FileStream(FileToImport, FileMode.OpenOrCreate))
{
   Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, uri.LocalPath, fs, true);
}
Microsoft.SharePoint.Client.File newFile = web.GetFileByServerRelativeUrl(uri.LocalPath);
context.Load(newFile);
context.ExecuteQuery();

//check out to make sure not to create multiple versions
newFile.CheckOut();

ListItem item = newFile.ListItemAllFields;
item["Created"] = info.SourceFile.CreationTime;
item["Modified"] = info.SourceFile.LastWriteTime;
item.Update();

// use OverwriteCheckIn type to make sure not to create multiple versions 
newFile.CheckIn(string.Empty, CheckinType.OverwriteCheckIn);
14
Alexandru Deliu

File.SaveBinaryDirect Method を使用して、SharePointサイト(SharePoint Onlineを含む)にファイルをアップロードするためのさらに別のオプション

/// <summary>
/// Uploads the specified file to a SharePoint site
/// </summary>
/// <param name="context">SharePoint Client Context</param>
/// <param name="listTitle">List Title</param>
/// <param name="fileName">File Name</param>
private static void UploadFile(ClientContext context, string listTitle,string fileName)
{
     using (var fs = new FileStream(fileName, FileMode.Open))
     {
          var fi = new FileInfo(fileName);
          var list = context.Web.Lists.GetByTitle(listTitle);
          context.Load(list.RootFolder);
          context.ExecuteQuery();
          var fileUrl = String.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, fi.Name);

          Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, fileUrl, fs, true);
      }
  }
8

新しいファイル属性/列を更新するdelax投稿の一部が機能しないことがわかりました。ここに、昇格されたフィールドを持つカスタム情報パスライブラリを探す別のバージョンがあります。

   public string AddNewForm(string WebUrl, string NewTitle)
    {
        string strMsg = "";
        if (string.IsNullOrEmpty(WebUrl))
            return EmptyProcURL;

        try
        {
            // Starting with ClientContext, the constructor requires a URL to the server running SharePoint. 
            using (ClientContext client = new ClientContext(WebUrl))
            {
                //client.Credentials = System.Net.CredentialCache.DefaultCredentials;

                // Assume that the web site has a library named "FormLibrary". 
                var formLib = client.Web.Lists.GetByTitle("FormLibrary");
                client.Load(formLib.RootFolder);
                client.ExecuteQuery();

                // FormTemplate path, The path should be on the local machine/server !
                string fileName = @"D:\Projects\FormTemplate.xml"; 

                var fileUrl = "";

                //Craete FormTemplate and save in the library.
                using (var fs = new FileStream(fileName, FileMode.Open))
                {
                    var fi = new FileInfo("newForm.xml");
                    fileUrl = String.Format("{0}/{1}", formLib.RootFolder.ServerRelativeUrl, fi.Name);
                    Microsoft.SharePoint.Client.File.SaveBinaryDirect(client, fileUrl, fs, true);
                }

                // Get library columns collection.
                var libFields = formLib.Fields;
                client.Load(libFields);
                client.ExecuteQuery();

                Microsoft.SharePoint.Client.File newFile = client.Web.GetFileByServerRelativeUrl(fileUrl);

                ListItem item = newFile.ListItemAllFields;

                // Here the index of Title column is 9, you may use this format to update any column (even promoted fields).
                // To find the index of interested column you should inspect libFields at debug mode, look in the libFields.Fields collection to find the index!
                item[libFields[9].StaticName] = NewTitle ;
                item.Update();
                client.ExecuteQuery();
            }
        }
        catch (Exception ex)
        {
            strMsg = ex.Message;
        }

        return strMsg;
    }
6
Hamed

次のコードを作成しましたが、うまく機能しています。

 static void Main(string[] args)
    {
       try
        { 
         using (ClientContext client = new ClientContext("https://sharepoint2018/sites/demos"))
            {                   
                string passWd = "password";
                SecureString securePassWd = new SecureString();
                foreach (var c in passWd.ToCharArray())
                {
                    securePassWd.AppendChar(c);
                }
                client.Credentials = new SharePointOnlineCredentials("username", securePassWd);
                var formLib = client.Web.Lists.GetByTitle("Documents");
                client.Load(formLib.RootFolder);
                client.ExecuteQuery();
                string fileName = @"C:\demo.txt";  // FilePath
                var fileUrl = "";  
                using (var fs = new FileStream(fileName, FileMode.Open))
                {
                    var fi = new FileInfo("demo.txt"); //file Title  
                    fileUrl = String.Format("{0}/{1}", formLib.RootFolder.ServerRelativeUrl, fi.Name);
                    Microsoft.SharePoint.Client.File.SaveBinaryDirect(client, fileUrl, fs, true);
                    client.ExecuteQuery();
                }  
                var libFields = formLib.Fields;
                client.Load(libFields);
                client.ExecuteQuery();
                Microsoft.SharePoint.Client.File newFile = client.Web.GetFileByServerRelativeUrl(fileUrl);
                ListItem item = newFile.ListItemAllFields;
                item.Update();
                client.ExecuteQuery();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
        }
    }

おかげで、

スダカール

1
sudhakar reddy