Sharepoint 2010上传文档

时间:2010-10-06 20:29:12

标签: c# vb.net sharepoint

如何将整个目录以及所有子目录和文件上载到SharePoint 2010 Server?

我不认为此功能是专门构建到SharePoint中的(只是在一个文件夹中上传多个文档)。但是我理解它的方式,我可以用VB或C#写一些东西来实现这个目的。我该怎么做呢?

或者有更简单的方法吗?我想上传的目录很大,所以逐个浏览文件夹是不可能的。

5 个答案:

答案 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);
        }
    }