连接Path.Getfilename(文件名)将文件上传到SharePoint

连接Path.Getfilename(文件名)将文件上传到SharePoint

问题描述:

我正在尝试编写一个程序,将文件传输到SharePoint,我正在使用Filestream,因为这将从文件服务器中提取服务器。我有困难连接Path.Getfilename(filename)Microsoft.SharePoint.Client.File.SaverBinaryDirect(context,"",fs,true);内的文字字符串我更像是一个管理员而不是程序员。任何帮助都会很棒。连接Path.Getfilename(文件名)将文件上传到SharePoint

class Program 
{ 
    static void Main(string[] args) 
    { 
     ClientContext context = new ClientContext("https://company.sharepoint.com"); 
     { 
      SecureString password = new SecureString(); 
      foreach (char c in "Password") 
      password.AppendChar(c); 
      context.Credentials = new SharePointOnlineCredentials("UserEmail", password); 
      context.ExecuteQuery(); 
      Console.WriteLine("File Transfer is Complete"); 
     } 

     string[] fileEntries = Directory.GetFiles(@"\\directorypath"); 
     foreach (string fileName in fileEntries) 
     { 
      Console.WriteLine(fileName); 
      Console.WriteLine(Path.GetFileName(fileName)); 
      using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
      { 
       Path.Combine(fileName,Path.GetFileName(fileName.Replace("/sites/Name ofSite/documentlibrary/", ""))); 
       Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "", fs, true); 
      } 


     } 
    } 
} 
+0

[与string.replace](https://msdn.microsoft.com/library/fk49wtc1.aspx)返回一个新的'string'和没有按” t改变它使用的'string'。看起来你想从'filename'替换(删除)路径信息,但是你把它放到[Path.GetFileName](https://msdn.microsoft.com/library/system.io.path.getfilename.aspx)中,这已经为你做了,所以只需使用'Path.GetFileName(filename)'。问题是,你为什么试图将(整个)'filename'与'filename'的FileName部分结合?结果看起来像'“c:\ path \ subpath \ file.ext \ file.ext”'。 – Corak

+0

您能否给出一个完整的路径和文件名以及想要获得的结果的例子(匿名)? – Corak

+0

我试图从一台服务器上将多个文件拖入Sharepoint, – user2350911

File.SaveBinaryDirect Method预计,serverRelativeUrl参数表示文件的对于服务器的URL字符串,例如:

/site/web/documents/file.zip 

构建文件服务器相对URL你可以结合列表/库服务器相关的url和文件名:

using (var fs = new FileStream(fileName, FileMode.Open)) 
{ 
    var fileUrl = "/site/web/documents/" + Path.GetFileName(fileName); 
    Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, fileUrl, fs, true); 
} 

变形例

static void Main(string[] args) 
    { 
     //source settings (local file system) 
     var sourcePath = @"C:\Users\jdoe\Documents"; 

     //target settings (SharePoint Online) 
     var webUrl = "https://contoso.sharepoint.com/"; 
     var username = "[email protected]"; 
     var password = "password"; 
     var targetListTitle = "Documents"; 

     var fileNames = Directory.GetFiles(sourcePath); //retrieve source files 

     using (var ctx = GetContext(webUrl, username, password)) 
     { 

      //prepare target list 
      var targetList = ctx.Web.Lists.GetByTitle(targetListTitle); 
      ctx.Load(targetList, l => l.RootFolder.ServerRelativeUrl); 
      ctx.ExecuteQuery(); 


      foreach (var fileName in fileNames) 
      { 
       using (var fs = new FileStream(fileName, FileMode.Open)) 
       { 
        var fileUrl = targetList.RootFolder.ServerRelativeUrl + "/" + Path.GetFileName(fileName); 
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, fileUrl, fs, true); 
       } 
      } 
     } 
    } 

其中

private static ClientContext GetContext(string url,string username, string password) 
    { 
     var ctx = new ClientContext(url); 
     var securePassword = new SecureString(); 
     foreach (char c in password) securePassword.AppendChar(c); 
     ctx.Credentials = new SharePointOnlineCredentials(username, securePassword); 
     return ctx; 
    }