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
Erstellen Sie eine Anwendungsseite in Microsoft Visual Studio 2010, wie in Erstellen von Anwendungsseiten für SharePoint beschrieben.
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>
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;
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.
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; }
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.
Hinweis |
---|
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