连接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);
}
}
}
}
答
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;
}
[与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
您能否给出一个完整的路径和文件名以及想要获得的结果的例子(匿名)? – Corak
我试图从一台服务器上将多个文件拖入Sharepoint, – user2350911