Categorías: buenas practicas

[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 🙂

Compartir
Publicado por
Adrián Díaz

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)