Freigeben über


Vorgehensweise: Hochladen einer Datei zu einer SharePoint-Website von einem lokalen Ordner

Letzte Änderung: Mittwoch, 7. Juli 2010

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

In dieser Programmieraufgabe wird das Hochladen einer Datei aus einem lokalen Ordner in einen Ordner auf einer Microsoft SharePoint Foundation-Website gezeigt. In der Aufgabe wird die EnsureParentFolder-Methode verwendet, um sicherzustellen, dass der Zielordner vorhanden ist.

Verfahren

So laden Sie eine Datei aus einem lokalen Ordner in einen Ordner auf einer SharePoint-Website hoch

  1. Erstellen Sie eine Anwendungsseite in Microsoft Visual Studio 2010, wie in Erstellen von Anwendungsseiten für SharePoint beschrieben.

  2. Fügen Sie der Seite ein HtmlInputFile-Steuerelement, ein Textfeld, eine Schaltfläche aus dem Formular und ein FormDigest-Steuerelement hinzu.

    <form id="Form1" method="post" runat="server">
       <SharePoint:FormDigest runat="server" />
       <input id="File1" type="file" runat="server" title="upldFileBox">
       <asp:Button id="Button1" runat="server" 
          Text="Upload File"></asp:Button>
       <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
    </form>
    
  3. Fügen Sie in der CodeBehind-Datei .aspx.csusing-Direktiven für die Namespaces System.IO und Microsoft.SharePoint wie folgt hinzu.

    Imports System.IO
    Imports Microsoft.SharePoint
    
    using System.IO;
    using Microsoft.SharePoint;
    
  4. Fügen Sie dem Click-Ereignis folgenden Code für die Schaltfläche hinzu:

    If File1.PostedFile Is Nothing Then
        Return
    End If 
    
    Dim destUrl As String = TextBox1.Text
    
    Dim site As SPWeb = New SPSite(destUrl).OpenWeb()
    
    Dim fStream As Stream = File1.PostedFile.InputStream
    Dim contents(fStream.Length) As Byte
    
    fStream.Read(contents, 0, CInt(fStream.Length))
    fStream.Close()
    
    EnsureParentFolder(site, destUrl)
    
    site.Files.Add(destUrl, contents)
    
    if (File1.PostedFile == null)
        return;
    
    string destUrl = TextBox1.Text;
    
    SPWeb site = new SPSite(destUrl).OpenWeb();
    
    Stream fStream = File1.PostedFile.InputStream;
    byte[] contents = new byte[fStream.Length];
    
    fStream.Read(contents, 0, (int)fStream.Length);
    fStream.Close(); 
    
    EnsureParentFolder(site, destUrl);
    
    site.Files.Add(destUrl, contents);
    

    Der Wert, den Sie in das Textfeld für das Ziel eingeben, muss eine absolute URL sein, einschließlich des Dateinamens, der dem Parameter destUrl zugeordnet ist.

    Zusätzlich zum Instanziieren eines SPWeb-Objekts für die übergeordnete Website wird durch die kombinierte Verwendung des SPSite-Konstruktors und der OpenWeb-Methode die URL überprüft, und es wird eine Argumentausnahme ausgegeben, falls die URL von der aktuellen SharePoint Foundation-Bereitstellung nicht bedient wird. Ein HtmlInputFile-Objekt wird zum Lesen der Quelldatei in ein Bytearray verwendet, das mit der Add-Methode der SPFileCollection-Klasse verwendet wird.

  5. Im Beispiel wird eine EnsureParentFolder-Methode definiert, um sicherzustellen, dass der übergeordnete Ordner an der Ziel-URL auf der angegebenen Website vorhanden ist, und es wird die websiterelative URL des übergeordneten Ordners zurückgegeben. Von der EnsureParentFolder-Methode werden zwei Parameter akzeptiert: ein SPWeb-Objekt, das die übergeordnete Website darstellt, und eine Zeichenfolge, die die absolute URL enthält, welche von der UploadFile-Methode des Beispiels übergeben wird. Falls der übergeordnete Ordner nicht vorhanden ist, wird er von der EnsureParentFolder-Methode erstellt.

    Public Function EnsureParentFolder(parentSite As SPWeb, 
            destinUrl As String) As String
    
        destinUrl = parentSite.GetFile(destinUrl).Url
    
        Dim index As Integer = destinUrl.LastIndexOf("/")
        Dim parentFolderUrl As String = String.Empty
    
        If index > - 1 Then
            parentFolderUrl = destinUrl.Substring(0, index)
            Dim parentFolder As SPFolder 
                = parentSite.GetFolder(parentFolderUrl)
    
            If Not parentFolder.Exists Then
                Dim currentFolder As SPFolder = parentSite.RootFolder
                Dim folder As String
    
                For Each folder In  parentFolderUrl.Split("/"c)
                    currentFolder = currentFolder.SubFolders.Add(folder)
                Next folder
            End If
        End If
    
        Return parentFolderUrl
    End Function 'EnsureParentFolder
    
    public string EnsureParentFolder(SPWeb parentSite, string destinUrl)
    {
        destinUrl = parentSite.GetFile(destinUrl).Url;
    
        int index = destinUrl.LastIndexOf("/");
        string parentFolderUrl = string.Empty;
    
        if (index > -1)
        {
            parentFolderUrl = destinUrl.Substring(0, index);
    
            SPFolder parentFolder 
                = parentSite.GetFolder(parentFolderUrl);
    
            if (! parentFolder.Exists)
            {
                SPFolder currentFolder = parentSite.RootFolder;
    
                foreach(string folder in parentFolderUrl.Split('/'))
                {
                    currentFolder 
                        = currentFolder.SubFolders.Add(folder);
                }
            }
        }
        return parentFolderUrl;
    }
    
  6. Die GetFile-Methode der SPWeb-Klasse wird in Kombination mit der Url-Eigenschaft der SPFile-Klasse verwendet, um die URL zu einer websiterelativen URL zu konvertieren, wobei eine Ausnahme ausgegeben wird, falls die angegebene URL innerhalb des Bereichs der Website nicht gefunden wird. Die URL des übergeordneten Ordners wird berechnet, indem die String.LastIndexOf-Methode verwendet wird, um das letzte Vorhandensein eines Schrägstrichs (/) innerhalb der Ziel-URL zu bestimmen. Falls kein Schrägstrich vorhanden ist (d. h., dass der Index gleich -1 ist), dann ist das Ziel der Stammordner für die Website, und vom parentFolderUrl-Parameter wird eine leere Zeichenfolge zurückgegeben. Andernfalls wird im Beispiel die GetFolder-Methode der SPWeb-Klasse verwendet, um den übergeordneten Zielordner zurückzugeben. Falls der Ordner nicht vorhanden ist, wird er vom Beispielcode erstellt.

Wenn Sie eine Datei aus einem lokalen Ordner hochladen möchten, der sich auf demselben Server befindet, auf dem SharePoint Foundation ausgeführt wird, können Sie stattdessen ein FileStream-Objekt verwenden. Fügen Sie in diesem Fall eine using-Direktive für den System.IO-Namespace hinzu, zusätzlich zu Direktiven für System und Microsoft.SharePoint. Im folgenden Beispiel wird der Click-Ereignishandler zum Aufrufen einer benutzerdefinierten UploadFile-Methode verwendet, die wiederum die zuvor beschriebene EnsureParentFolder-Methode aufruft.

Public Sub UploadFile(srcUrl As String, destUrl As String)

    If Not File.Exists(srcUrl) Then

        Throw New ArgumentException(String.Format("{0} does not exist", 
            srcUrl), "srcUrl")

    End If

    Dim site As SPWeb = New SPSite(destUrl).OpenWeb()

    Dim fStream As FileStream = File.OpenRead(srcUrl)
    Dim contents(fStream.Length) As Byte
    fStream.Read(contents, 0, CInt(fStream.Length))
    fStream.Close()

    EnsureParentFolder(site, destUrl)

    site.Files.Add(destUrl, contents)

End Sub 'UploadFile
public void UploadFile(string srcUrl, string destUrl)
{
    if (! File.Exists(srcUrl))
    {
        throw new ArgumentException(String.Format("{0} does not exist", 
            srcUrl), "srcUrl");
    }

    SPWeb site = new SPSite(destUrl).OpenWeb();

    FileStream fStream = File.OpenRead(srcUrl);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    fStream.Close(); 

    EnsureParentFolder(site, destUrl);
    site.Files.Add(destUrl, contents);
}

Für die UploadFile-Methode werden drei Parameter akzeptiert. Der srcUrl-Parameter gibt den Pfad des Quellspeicherorts im Dateisystem des lokalen Computers an, und der destUrl-Parameter gibt die absolute URL des Ziels an. Ein FileStream-Objekt wird zum Lesen der Quelldatei in ein Bytearray verwendet, das mit der Add-Methode der SPFileCollection-Klasse verwendet werden soll.

HinweisHinweis

Die Größe der hochgeladenen Datei darf 2 GB nicht übersteigen.

Siehe auch

Konzepte

Arbeiten mit Listenobjekten und Auflistungen

Verwenden von Visual Studio für die SharePoint-Enwicklung

Sicherheitsüberprüfung und POSTs zum Aktualisieren von Daten

Rechteerweiterungen