Import de fichiers volumineux dans SharePoint

sharepointLogo

Lorsque vous travaillez avec SharePoint, vous pouvez être amené à uploader des fichiers dans une bibliothèque de documents via le code. Nous allons donc voir dans cet article la méthode pour réaliser cette action.

Vous créez alors un FileCreationInformation (https://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.client.filecreationinformation.aspx) qui contiendra :

  • Les metadatas de votre fichier (si vous souhaitez en spécifier)
  • Le nom de votre fichier
  • Son contenu

Voici le code correspondant à la création :

Microsoft.SharePoint.Client.File uploadFile;
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
	FileCreationInformation fileInfo = new  FileCreationInformation();
	fileInfo.ContentStream = fs;
     	fileInfo.Url = uniqueFileName;
     	fileInfo.Overwrite = true;
    	uploadFile = docs.RootFolder.Files.Add(fileInfo);
     	ctx.Load(uploadFile);
     	ctx.ExecuteQuery();
}
Import d'un petit fichier

Arrive le moment fatidique où vous exécutez votre requête mais :

The request message is too big. The server does not allow messages larger than 2097152 bytes.

Le fichier que vous souhaitez uploader est trop volumineux. Vous ne pouvez donc pas l’envoyer en une seule exécution.

Si vous avez la chance de travailler avec Office 365, une première solution s’offre à vous. Vous pouvez utiliser les fonctions complémentaires présentes dans cette librairie pour uploader vos fichiers

Utilisation d’Office 365

Votre fichier à uploader est trop grand, vous devez le partitionner. En utilisant Office 365, trois fonctions sont mises à votre disposition comme décrit dans la MSDN :  https://msdn.microsoft.com/en-us/library/office/dn904536.aspx.

  • StartUpload
  • ContinueUpload
  • FinishUpload

Ces trois fonctions prennent en paramètre :

  • Un GUID
  • L’url du fichier
  • Un memoryStream.

Elles renvoient un ClientResult<long> qui correspond au nombre d’octets uploader avec succès.

La première fonction vous permet de démarrer votre chargement. Vous devez néanmoins créer votre fichier vide (FileInfoCreation) avant de démarrer l’upload.

Dans le cas où vous ne travaillez pas avec Office 365, vous pouvez « passer en force ». Cette solution est certes moins élégante, mais tout de même efficace.

Ecrire directement

La deuxième solution est décrire directement sur le SharePoint avec la fonction  Microsoft.SharePoint.Client.File.SaveBinaryDirect en lui donnant : le contexte d’exécution, l’url du fichier, le memoryStream et enfin, indiquez si oui ou non le fichier devra être écrasé dans le cas où il existerait déjà.

Voici le code correspondant :

using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = fInfo.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
       }
       byteArr = ms.ToArray();
}

MemoryStream destStream = new MemoryStream(byteArr);

Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, folder.ServerRelativeUrl + "/" + fileInfo.Url, destStream, true);

context.ExecuteQuery();
Ecrire directement le fichier

 

Conlusion

Vos fichiers et vos metadatas ont été uploadés avec succès.

sharepoint

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.