2017-11-30 16 views
0

Ich möchte mir bei dieser Aufgabe helfen, wenn es möglich ist. Ich möchte in der Lage sein, Dateien in Ordner auf Sharepoint Online hochzuladen. Im Moment kann ich nur in Bibliotheken hochladen. Unten ist der Code, den ich gerade verwende.Hochladen von Dateien in einen bestimmten Ordner in einer Bibliothek auf Sharepoint

private void BtnUpload_Click(object sender, EventArgs e) 
{ 
    siteURL += "/" + tbDept.Text; 

    try 
    { 
     using (ClientContext ctx = new ClientContext(siteURL)) 
     { 
      SecureString passWord = new SecureString(); 
      foreach (var c in logUser.getPassword()) 
      { 
       passWord.AppendChar(c); 
      } 
      ctx.Credentials = new SharePointOnlineCredentials(logUser.getUsername(), passWord); 
      Web web = ctx.Web; 

      foreach (string fname in arrAllFiles) //arrAllFiles --> contains multiple files to be uploaded 
      { 
       FileCreationInformation newFile = new FileCreationInformation(); 
       newFile.Overwrite = true; 
       newFile.Content = System.IO.File.ReadAllBytes(fname); 
       newFile.Url = System.IO.Path.GetFileName(fname); 
       List docs = web.Lists.GetByTitle(tbLibrary.Text); //tbLibrary --> Library's Name 
       Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile); 
       ctx.ExecuteQuery(); 
      } 
      MessageBox.Show("Upload Complete!"); 
      siteURL = "https://mycompany.sharepoint.com"; 
     } 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
     siteURL = "https://mycompany.sharepoint.com"; 
    } 
} 

Der Code funktioniert einwandfrei. Ich muss lediglich Funktionalität hinzufügen, um Dateien in einen bestimmten Ordner in einer Bibliothek hochzuladen.

Vielen Dank im Voraus.

+0

wird dies mit einem Fenster erfolgen App oder Web-App. Wenn es über Web-Anwendung ist, dann müssen Sie verstehen, 'ServerMapPath' Funktion werfen Sie einen Blick auf diesen Link zum Beispiel https://stackoverflow.com/question s/1199486/server-mappath-in-c-sharp-classlibrary – MethodMan

+0

Es wird Windows App sein. –

+0

dann erhalten Sie den Speicherort der newworkshare es würde in etwa so aussehen ''\\ mySharePointPath \ somefolder \" 'Sie müssen mit Ihrem Netzwerk-Team zu bekommen, um den Ordner vollständig Schreib-Lese-Zugriff und ich würde vorschlagen, erstellen eigene kleine 'Async CoyToShairPoint' Funktion auch mit der Standard-C# .NET CopyTo-Funktion nur dekorieren es geeignet mit asych Aufgabe und Funktionen abwarten .. – MethodMan

Antwort

0

Hier ist ein Beispielcode, den ich vor einiger Zeit geschrieben habe. Sie können es an Ihre Bedürfnisse anpassen. Die SaveBinaryDirect-Methode verwendet den Kontext und den relativen Pfad, der den Ordner enthält. Das sollte funktionieren.

ClientContext ctx = new ClientContext("http://sp13"); 

Folder folder = ctx.Web.GetFolderByServerRelativeUrl("Shared Documents"); 
string file = String.Concat(Environment.CurrentDirectory, @"\Files\SharePointGuidance2010.pdf"); 

List docLib = ctx.Web.Lists.GetByTitle("Documents"); 
ctx.Load(docLib); 
ctx.ExecuteQuery(); 

using (MemoryStream stream = new MemoryStream(System.IO.File.ReadAllBytes(file))) 
{ 
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, "/shared documents/SubFolder/spg.pdf", stream, true); 
} 

oder Versuchen Sie die folgenden Änderungen an Ihrem Code:

Folder folder = web.GetFolderByServerRelativeUrl("Documents/Subfolder"); 
FileCreationInformation fci = new FileCreationInformation(); 
fci.Content = System.IO.File.ReadAllBytes(@”..\..\myfile.txt”); 
fci.Url = “myfile.txt”; 
fci.Overwrite = true; 
File fileToUpload = folder.Files.Add(fci); 
ctx.Load(fileToUpload); 

ctx.ExecuteQuery(); 
+0

Vielen Dank für Ihre Antwort, aber ich bekomme eine Datei nicht gefunden Ausnahme (vom Sharepoint-Ende) an diesem Punkt: ctx.ExecuteQuery(); –

+0

Ich habe meine Antwort mit einer zusätzlichen Option bearbeitet.Ich habe die erste Option verwendet, aber vielleicht nicht mit einem Ordner, aber das sollte funktionieren. Option 2 besteht darin, den Ordner selbst zu erstellen und ein File Creation Information-Objekt aus Ihrer Datei zu erstellen und dieses zu laden. –

+0

Danke Mann. Du bist eine Legende! Der aktualisierte Code funktioniert sehr gut. –

0

UPDATE: folgende Code funktioniert, ich habe es selbst getestet:

var filePath = @"C:\PATH_TO_FILE\test.docx"; 

using (var context = new ClientContext("YOUR_SITE_URL") { Credentials = credentials }) 
{ 
    var folder = context.Web.GetFolderByServerRelativeUrl("/sites/YOUR_SITE/LIBRARY_INTERNAL_NAME/FOLDER_NAME"); 

    context.Load(folder); 
    context.ExecuteQuery(); 

    folder.Files.Add(new FileCreationInformation 
    { 
     Overwrite = true, 
     Content = System.IO.File.ReadAllBytes(filePath), 
     Url = Path.GetFileName(filePath) 
    }); 

    context.ExecuteQuery(); 
} 
+0

Ihr Code funktioniert auch. Danke Jungs. –

Verwandte Themen