Arquitectura, buenas prácticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016

[SharePoint] Subir ficheros de gran tamaño a bibliotecas con el modelo de objetos cliente

En los últimos tiempos he estado inmerso en el desarrollo de una API Rest de tal forma que todas las aplicaciones de la compañía pudieran sacarle el máximo partido a la gestión documental que naturalmente esta en nuestro servidor favorito. En este post, el objeto es contar cómo librar las limitaciones que trae de serie el modelo de objetos de SharePoint y cómo poder subir ficheros con una gran capacidad a SharePoint.

¿Porque utilizar el modelo de objetos cliente?
La respuesta es obvia, estoy implementando una API REST que no va a estar residida en SharePoint, ni por requerimientos ni limitaciones, yo puedo tener la API en cualquier maquina de la organización y poder acceder a SharePoint sin ningún problema (en futuros post ya abordare mi inicio en el maravillo mundo de WebAPI).

En un primer intento de subir los ficheros a SharePoint puedo llegar al siguiente código:

 ClientContext context = new ClientContext("http://encamina");
 Web web = context.Web;
 FileCreationInformation newFile = new FileCreationInformation();
 newFile.Content = System.IO.File.ReadAllBytes(@"C:\IberianSharePointConference.pptx");
 newFile.Url = "IberianSharePointConference.pptx";
 List docs = web.Lists.GetByTitle("Documents");
 Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
 context.Load(uploadFile);
 context.ExecuteQuery();

Si ejecutamos este código funcionará a la perfección salvo cuando empecemos a subir ficheros con más de 4 Megas, con lo cual nos encontraremos con el siguiente error:

(400) Bad Request
Que es lo que ocurre cuando el modelo de objetos cliente por defecto no puede superar los 4 Megas de capacidad. Ahora bien, ¿cómo lo podemos solucionar? Pues modificando este parámetro bien por PowerShell o bien con una feature. Yo he optado por la segunda opción con el siguiente código:

 SPWebService ws = SPWebService.ContentService;
 SPClientRequestServiceSettings clientSettings = ws.ClientRequestServiceSettings;
 clientSettings.MaxReceivedMessageSize = 40485760;
 ws.Update();

El código no tiene mucho misterio más que nada que indicar el valor «MaxReceivedMessageSize» esta establecido en 40 Megas y con esta modificación ya podemos permitir subir ficheros con mayor capacidad.
Si ejecutamos el código de arriba nos damos cuenta que sigue sin funcionar ¿Porqué? 🙁 La cuestión es que cuando estamos intentando recuperar el fichero no se puede traer un fichero integro por temas de tamaño sino que es necesario leer el fichero en bloques, para ello, modificamos el primer código con el siguiente fragmento de código:

ClientContext context = new ClientContext("http://encamina");
using (FileStream fs = new FileStream(@"C:\IberianSharePointConference.pptx", FileMode.Open))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/documents/IberianSharePointConference.pptx", fs, true);
}

Con esto ya tenemos todos los problemas de desarrollo solucionados. Pero ¡ojo! Hay un limite en la Web Application sobre el tamaño de los archivos por defecto que está puesto en 50 Mb., lo cual para tratarse de un documento es un buen limite. Si queremos cambiar este limite desde la Administración Central de SharePoint se puede realizar sin ningún tipo de problemas, para ello, tenemos que seguir los siguientes pasos:
– Entrar en la Central Administration. Dentro de Application Management entrar en Manage Web Applications.

– Seleccionar la Web Application que corresponda y entrar en General Settings.

– Buscamos el campo Maximun Upload Size y lo modificamos con el tamaño máximo que deseemos (en nuestro caso 100 Mb).

Una vez realizadas todas estas modificaciones ya podemos subir ficheros a SharePoint con un tamaño relativamente grande sin muchos problemas.

Conclusión

SharePoint en ocasiones es un producto que no es trivial, a veces te sorprende que aspectos relativamente simples los puedas realizar relativamente rápidos, sin embargo hay ciertas ocasiones que nos toca bajar al nivel más bajo para conseguir nuestro objetivo. Que aunque cueste un poco más, al final tienes la satisfacción del trabajo bien realizado y conseguido 🙂

mm

Sobre Adrián Díaz

Adrián Díaz es Ingeniero Informático por la Universidad Politécnica de Valencia. Es MVP de Microsoft en la categoría Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 3 años está centrado en el desarrollo sobre SharePoint. Actualmente es Software & Cloud Architect Lead en ENCAMINA.
Esta entrada ha sido publicada en buenas practicas y etiquetada como , . Enlace permanente .

One Response to "[SharePoint] Subir ficheros de gran tamaño a bibliotecas con el modelo de objetos cliente"

Suscríbete a Desarrollando sobre SharePoint

Suscríbete a Desarrollando sobre SharePoint

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores