web-dev-qa-db-ja.com

SharePointのドキュメントライブラリにファイルをアップロードするにはどうすればよいですか?

SharePointのドキュメントライブラリにファイルをプログラムでアップロードするにはどうすればよいですか?

現在、C#を使用して、ドキュメントライブラリリストにドキュメントを追加するWindowsアプリケーションを作成しています。

44
Adyt

オブジェクトモデルまたは SharePoint Webservices を使用して、ドキュメントをSharePointライブラリにアップロードできます。

オブジェクトモデルを使用したアップロード:

String fileToUpload = @"C:\YourFile.txt";
String sharePointSite = "http://yoursite.com/sites/Research/";
String documentLibraryName = "Shared Documents";

using (SPSite oSite = new SPSite(sharePointSite))
{
    using (SPWeb oWeb = oSite.OpenWeb())
    {
        if (!System.IO.File.Exists(fileToUpload))
            throw new FileNotFoundException("File not found.", fileToUpload);                    

        SPFolder myLibrary = oWeb.Folders[documentLibraryName];

        // Prepare to upload
        Boolean replaceExistingFiles = true;
        String fileName = System.IO.Path.GetFileName(fileToUpload);
        FileStream fileStream = File.OpenRead(fileToUpload);

        // Upload document
        SPFile spfile = myLibrary.Files.Add(fileName, fileStream, replaceExistingFiles);

        // Commit 
        myLibrary.Update();
    }
}
64
Henrique Zacchi

このエラーが発生した場合、「値が期待される範囲内にないこの行で:

SPFolder myLibrary = oWeb.Folders[documentLibraryName];

代わりにこれを使用してエラーを修正します。

SPFolder myLibrary = oWeb.GetList(URL OR NAME).RootFolder;

リストなどは一意であるため、常にURlを使用してください。名前は最良の方法ではありません;)

12
Ricardo Vieira
    string filePath = @"C:\styles\MyStyles.css"; 
    string siteURL = "http://MyDomain.net/"; 
    string libraryName = "Style Library"; 

    using (SPSite oSite = new SPSite(siteURL)) 
    { 
        using (SPWeb oWeb = oSite.OpenWeb()) 
        { 
            if (!System.IO.File.Exists(filePath)) 
                throw new FileNotFoundException("File not found.", filePath);                     

            SPFolder libFolder = oWeb.Folders[libraryName]; 

            // Prepare to upload 
            string fileName = System.IO.Path.GetFileName(filePath); 
            FileStream fileStream = File.OpenRead(filePath); 

            //Check the existing File out if the Library Requires CheckOut
            if (libFolder.RequiresCheckout)
            {
                try {
                    SPFile fileOld = libFolder.Files[fileName];
                    fileOld.CheckOut();
                } catch {}
            }

            // Upload document 
            SPFile spfile = libFolder.Files.Add(fileName, fileStream, true); 

            // Commit  
            myLibrary.Update(); 

            //Check the File in and Publish a Major Version
            if (libFolder.RequiresCheckout)
            {
                    spFile.CheckIn("Upload Comment", SPCheckinType.MajorCheckIn);
                    spFile.Publish("Publish Comment");
            }
        } 
    } 
8
user1735365

SharePoint 2013の新しいライブラリを使用して、次のようなことができました。

    private void UploadToSharePoint(string p, out string newUrl)  //p is path to file to load
    {
        string siteUrl = "https://myCompany.sharepoint.com/site/";
        //Insert Credentials
        ClientContext context = new ClientContext(siteUrl);

        SecureString passWord = new SecureString();
        foreach (var c in "mypassword") passWord.AppendChar(c);
        context.Credentials = new SharePointOnlineCredentials("myUserName", passWord);
        Web site = context.Web;

        //Get the required RootFolder
        string barRootFolderRelativeUrl = "Shared Documents/foo/bar";
        Folder barFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl);

        //Create new subFolder to load files into
        string newFolderName = baseName + DateTime.Now.ToString("yyyyMMddHHmm");
        barFolder.Folders.Add(newFolderName);
        barFolder.Update();

        //Add file to new Folder
        Folder currentRunFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl + "/" + newFolderName);
        FileCreationInformation newFile = new FileCreationInformation { Content = System.IO.File.ReadAllBytes(@p), Url = Path.GetFileName(@p), Overwrite = true };
        currentRunFolder.Files.Add(newFile);
        currentRunFolder.Update();

        context.ExecuteQuery();

        //Return the URL of the new uploaded file
        newUrl = siteUrl + barRootFolderRelativeUrl + "/" + newFolderName + "/" + Path.GetFileName(@p);
    }
6
Uziel Sulkies

Webサービスの代替として、FrontPage RPC APIから put document 呼び出しを使用できます。これには、ファイルデータと同じリクエストでメタデータ(列)を提供できるという追加の利点があります。明らかな欠点は、プロトコルがもう少し不明瞭であることです(非常によく文書化されたWebサービスと比較して)。

Frontpage RPCの使用を説明するリファレンスアプリケーションについては、CodePlexの SharePad プロジェクトを参照してください。

5
Paul-Jan
        try
        {
            //Variablen für die Verarbeitung
            string source_file = @"C:\temp\offer.pdf";
            string web_url = "https://stackoverflow.sharepoint.com";
            string library_name = "Documents";
            string admin_name = "[email protected]";
            string admin_password = "Password";

            //Verbindung mit den Login-Daten herstellen
            var sercured_password = new SecureString();
            foreach (var c in admin_password) sercured_password.AppendChar(c);
            SharePointOnlineCredentials credent = new 
            SharePointOnlineCredentials(admin_name, sercured_password);

            //Context mit Credentials erstellen
            ClientContext context = new ClientContext(web_url);
            context.Credentials = credent;

            //Bibliothek festlegen
            var library = context.Web.Lists.GetByTitle(library_name);

            //Ausgewählte Datei laden
            FileStream fs = System.IO.File.OpenRead(source_file);

            //Dateinamen aus Pfad ermitteln
            string source_filename = Path.GetFileName(source_file);

            //Datei ins SharePoint-Verzeichnis hochladen
            FileCreationInformation fci = new FileCreationInformation();
            fci.Overwrite = true;
            fci.ContentStream = fs;
            fci.Url = source_filename;
            var file_upload = library.RootFolder.Files.Add(fci);

            //Ausführen
            context.Load(file_upload);
            context.ExecuteQuery();

            //Datenübertragen schließen
            fs.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Fehler");
            throw;
        }
0
Eren Pak