如何将整个目录以及所有子目录和文件上载到SharePoint 2010 Server?
我不认为此功能是专门构建到SharePoint中的(只是在一个文件夹中上传多个文档)。但是我理解它的方式,我可以用VB或C#写一些东西来实现这个目的。我该怎么做呢?
或者有更简单的方法吗?我想上传的目录很大,所以逐个浏览文件夹是不可能的。
答案 0 :(得分:4)
将视图更改为“资源管理器视图”,您可以从Windows客户端计算机拖放文件。要以编程方式执行此操作,您只需将文件复制到UNC路径,如 \\ SERVERNAME \ path \ to \ documentlibrary
请注意,在WSS 3.0 / MOSS 2007中,如果您在文档库上启用了版本控制,则会出现问题,然后您必须在“资源管理器视图”中拖入它们后“签入”每个文档。 (在这种情况下,您可以在添加文件之前禁用版本控制。)我不知道这是否仍然是SP 2010中的一个问题。
答案 1 :(得分:2)
如果你需要这里的代码,它是用于大规模检查和批量检查,以及递归复制,不要使用.Net 4 Framework,因为你会得到这个错误
Unhandled Exception: System.PlatformNotSupportedException: Microsoft SharePoint
is not supported with version 4.0.30319.1 of the Microsoft .Net Runtime.
at Microsoft.SharePoint.Administration.SPConfigurationDatabase.get_Farm()
at Microsoft.SharePoint.Administration.SPFarm.FindLocal(SPFarm& farm, Boolean
& isJoined)
at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
at SharepointCopy.MassCheckOut()
at SharepointCopy.Process()
at Program.Main(String[] args)
所以我建议使用.Net 3.5
using System;
using Microsoft.SharePoint;
using System.IO;
public static void RecursiveMassCheckIn()
{
using (SPSite oSharepointSite = new SPSite("http://sharepoint.com/MyTeamSite"))
{
using (SPWeb oSharepointWeb = oSharepointSite.OpenWeb())
{
SPDocumentLibrary oSharepointDocs = (SPDocumentLibrary)oSharepointWeb.Lists["MyDocumentLibrary"];
int iFolderCount = oSharepointDocs.Folders.Count;
//Check in whats on root
MassCheckIn(oSharepointDocs.RootFolder);
//Check in whats on subfolders
for (int i = 0; i < iFolderCount; i++)
{
MassCheckIn(oSharepointDocs.Folders[i].Folder);
}
}
}
}
public static void MassCheckIn(SPFolder oSharepointFolder)
{
foreach (SPFile oSharepointFiles in oSharepointFolder.Files)
{
if (oSharepointFiles.CheckOutType != SPFile.SPCheckOutType.None)
{
oSharepointFiles.CheckIn("Programmatically Checked In");
}
}
}
public static void RecursiveCopy(string sSourceFolder, string sDestinationFolder)
{
if (!Directory.Exists(sDestinationFolder))
{
Directory.CreateDirectory(sDestinationFolder);
}
string[] aFiles = Directory.GetFiles(sSourceFolder);
foreach (string sFile in aFiles)
{
string sFileName = Path.GetFileName(sFile);
string sDestination = Path.Combine(sDestinationFolder, sFileName);
File.Copy(sFile, sDestination);
}
string[] aFolders = Directory.GetDirectories(sSourceFolder);
foreach (string sFolder in aFolders)
{
string sFileNameSub = Path.GetFileName(sFolder);
string sDestinationSub = Path.Combine(sDestinationFolder, sFileNameSub);
RecursiveCopy(sFolder, sDestinationSub);
}
}
然后运行
RecursiveCopy(@"C:\LocalFolder\", @"\\sharepoint.com\MyTeamSite\MyDocumentLibrary\");
RecursiveMassCheckIn();
答案 2 :(得分:0)
尝试使用PUT
WebRequest,like used here。
答案 3 :(得分:0)
在SharePoint 2010中,此功能是开箱即用的。
来自Microsoft SharePoint Team Blog:
要将项目添加到此库,您 可以单击“添加文档”按钮 在视图中。那个按钮将永远 在当前结束时可用 页面,如果你想快速添加 该库的文件。当你 点击它,你会发现相反 导航整个页面,我们只是 提出一个对话框,问你在哪里 想上传。这使它更快 加载也更容易理解 这是怎么回事。对于这篇文章,我 实际上想要上传多个文件 - 所以继续点击上传 多个文件。
...
您可以将文件拖到蓝色上 矩形将它们添加到您的上传 列表,或者您可以单击“浏览” 而是在文件中查找文件 Windows对话框。一旦你选择了 他们,点击确定,他们将开始 上传
我刚刚在SharePoint 2010文档库中尝试过此操作。我创建了一个文件夹层次结构,并添加了几个记事本文件。然后我将最顶层的文件夹拖到上传多个文件对话框中,并将该文件夹及其所有子文件夹和文件上传。
请注意,使用上传多个文件需要在客户端上使用Silverlight。
答案 4 :(得分:0)
我还建议在这里使用SharePoint对象模型是以下代码:
static void Main(string[] args)
{
SPSite site = new SPSite("site url");
SPWeb web = site.OpenWeb();
string stitle = web.Title;
string localPath = "local path";
string documentLibraryName = "Documents";
CreateDirectories(localPath,web.Folders[documentLibraryName].SubFolders);
}
static void CreateDirectories(string path, SPFolderCollection oFolderCollection)
{
//Upload Multiple Files
foreach (FileInfo oFI in new DirectoryInfo(path).GetFiles())
{
FileStream fileStream = File.OpenRead(oFI.FullName);
SPFile spfile = oFolderCollection.Folder.Files.Add
(oFI.Name, fileStream, true);
spfile.Update();
}
//Upload Multiple Folders
foreach (DirectoryInfo oDI in new DirectoryInfo(path).GetDirectories())
{
string sFolderName = oDI.FullName.Split('\\')
[oDI.FullName.Split('\\').Length - 1];
SPFolder spNewFolder = oFolderCollection.Add(sFolderName);
spNewFolder.Update();
//Recursive call to create child folder
CreateDirectories(oDI.FullName, spNewFolder.SubFolders);
}
}