Partager via


Procédure : télécharger un fichier sur un site SharePoint à partir d'un dossier local

Dernière modification : mercredi 7 juillet 2010

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

Cette tâche de programmation indique comment télécharger un fichier d'un dossier local vers un dossier d'un site Microsoft SharePoint Foundation. Cette tâche utilise la méthode EnsureParentFolder pour vérifier l'existence du dossier de destination.

Procédures

Pour transférer un fichier à partir d’un dossier local dans un dossier d’un site SharePoint

  1. Créez une page d’application dans Microsoft Visual Studio 2010, en suivant les instructions indiquées dans Création de pages d'application pour SharePoint.

  2. Ajoutez un contrôle HtmlInputFile, une zone de texte, un bouton au formulaire et un contrôle FormDigest dans la page.

    <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. Dans le fichier code-behind .aspx.cs, ajoutez des directives using pour les espaces de noms System.IO et Microsoft.SharePoint, comme indiqué ci-dessous.

    Imports System.IO
    Imports Microsoft.SharePoint
    
    using System.IO;
    using Microsoft.SharePoint;
    
  4. Ajoutez le code suivant à l’événement Click pour le bouton.

    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);
    

    La valeur que vous tapez dans la zone de texte de la destination doit être une URL absolue, incluant le nom de fichier, qui est attribuée au paramètre destUrl .

    Outre l’instanciation d’un objet SPWeb pour le site parent, l’utilisation combinée du constructeur SPSite et de la méthode OpenWeb valide l’URL et déclenche une exception d’argument si l’URL n’est pas satisfaite par le déploiement SharePoint Foundation actuel. Un objet HtmlInputFile est utilisé pour lire le fichier source dans un tableau d’octets pour l’utiliser avec la méthode Add de la classe SPFileCollection.

  5. L’exemple définit une méthode EnsureParentFolder pour garantir que le dossier parent dans l’URL de destination existe bien dans le site spécifié et renvoie l’URL du dossier parent par rapport au site. La méthode EnsureParentFolder accepte deux paramètres : un objet SPWeb qui représente le site parent et une chaîne qui contient l’URL absolue qui est transmise à partir de la méthode UploadFile de l’exemple. Si le dossier parent n’existe pas, la méthode EnsureParentFolder le crée.

    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. La méthode GetFile de la classe SPWeb est utilisée en combinaison avec la propriété Url de la classe SPFile pour convertir l'URL en une URL relative au site, produisant une exception si l'URL spécifiée ne se trouve pas dans l'étendue du site. L'URL du dossier parent est calculée à l'aide de la méthode String.LastIndexOf pour déterminer la dernière apparence d'une barre oblique (/) dans l'URL de destination. S'il n'y a pas de barre oblique (autrement dit, si l'index est égal à -1), c'est que la destination est le dossier racine du site et le paramètre parentFolderUrl renvoie une chaîne vide. Sinon, l'exemple utilise la méthode GetFolder de la classe SPWeb pour renvoyer le dossier parent de destination. Si ce dossier n'existe pas, l'exemple le crée.

Pour envoyer un fichier d’un dossier local se trouvant sur le même serveur qui exécute SharePoint Foundation, vous pouvez utiliser un objet FileStream à la place. Dans ce cas, ajoutez une directive using pour l’espace de noms System.IO en plus des directives pour System et Microsoft.SharePoint. L’exemple suivant utilise le gestionnaire d’événements Click pour appeler une méthode UploadFile personnalisée, qui à son tour appelle la méthode EnsureParentFolder décrite précédemment.

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

La méthode UploadFile accepte deux paramètres. Le paramètre srcUrl spécifie le chemin d’accès à l’emplacement source dans le système de fichiers de l’ordinateur local et le paramètre destUrl spécifie l’URL absolue de la destination. Un objet FileStream est utilisé pour lire le fichier source dans un tableau d’octets pour l’utiliser avec la méthode Add de la classe SPFileCollection.

Notes

La taille du fichier qui est téléchargé ne peut pas dépasser 2 Go.

Voir aussi

Concepts

Utilisation des objets Liste et des collections

Utilisation de Visual Studio pour le développement SharePoint

Validation de la sécurité et utilisation des publications pour la mise à jour des données

Élévation de privilège