Sharepoint 2010 Загрузка документов - PullRequest
0 голосов
/ 07 октября 2010

Как бы я мог загрузить весь каталог, все подкаталоги и файлы на сервер SharePoint 2010?

Я не думаю, что эта функция специально встроена в SharePoint (просто загрузка нескольких документов в одну папку).Но, насколько я понимаю, я могу написать что-то на VB или C # для достижения этой цели.Как бы я поступил так?

Или есть более простой способ сделать это?Директория, которую я хочу загрузить, огромна, поэтому о просмотре папок одна за другой не может быть и речи.

Ответы [ 5 ]

4 голосов
/ 07 октября 2010

Измените представление на «Вид обозревателя», и вы сможете перетаскивать файлы с клиентского компьютера Windows. Чтобы сделать это программно, вы можете просто скопировать файлы в UNC-путь, например \\ SERVERNAME \ path \ to \ documentlibrary

Обратите внимание, что в WSS 3.0 / MOSS 2007 существует проблема, если у вас включено управление версиями в библиотеке документов, а затем вам необходимо «зарегистрировать» каждый документ после того, как вы перетащили его в представление Explorer. (В этом случае вы можете отключить управление версиями перед добавлением файлов.) Не знаю, является ли это проблемой в SP 2010.

2 голосов
/ 07 октября 2010

Если вам нужны здесь коды, то для массовой проверки и массовой проверки, а также для рекурсивного копирования не используйте .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();
0 голосов
/ 16 февраля 2016

Я также предлагаю использовать объектную модель 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);
        }
    }
0 голосов
/ 07 октября 2010

В SharePoint 2010 эта функциональность предоставляется "из коробки".

Из блога Microsoft SharePoint Team :

Чтобы добавить элемент в эту библиотеку, вы можно нажать на кнопку Добавить документ в представлении. Эта кнопка будет всегда быть доступным в конце текущего страница, если вы хотите быстро добавить документы в эту библиотеку. Когда ты нажмите на нее, вы заметите, что вместо навигации по всей странице, мы просто установить диалог, спрашивающий вас, где вы хочу загрузить. Это делает это быстрее загрузить, а также легче понять в чем дело. Для этого поста я на самом деле хотите загрузить несколько файлов - так что давай и нажми на Загрузить Несколько файлов.

...

Вы можете перетащить файлы на синий прямоугольник, чтобы добавить их в свою загрузку список, или вы можете нажать на Обзор для вместо файлов, чтобы найти файлы в диалоговое окно Как только вы выбрали их, нажмите Ok, и они начнут загрузка

Я только что попробовал это в библиотеке документов SharePoint 2010. Я создал иерархию папок и добавил в нее пару файлов блокнота. Затем я перетащил верхнюю папку в диалоговое окно «Загрузка нескольких файлов», и она загрузила эту папку вместе со всеми ее подпапками и файлами.

Обратите внимание, что для загрузки нескольких файлов требуется Silverlight на клиенте.

0 голосов
/ 07 октября 2010

Попробуйте использовать PUT WebRequest, , как здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...