- Home
- Blog
Blog
Get SharePoint Document Library Size
On 09/10/2025
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function GetFolderSize(siteUrl, listUrl1, query) {
// Fetch options with headers for authentication and response format
const fetchOptions = {
method: 'GET',
headers: {
'Accept': 'application/json;odata=verbose'
}
};
// get web relativeUrl
var req = `${siteUrl}/_api/web?$select=ServerRelativeUrl`;
const webServerRelativUrl = (await (await fetch(req, fetchOptions)).json()).d.ServerRelativeUrl;
let query1 = "";
if (`${query}`.trim() !== "") {
query1 = `&$filter=${query}`;
query = ` and ${query}`;
}
// get firstId
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id asc`;
console.log("req", req);
const firstId = 0;
console.log("firstId", firstId);
// get lastId
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id desc`;
console.log("last", req);
const lastId = (await (await fetch(req, fetchOptions)).json()).d.results[0].Id;
console.log("lastId", lastId);
let startId = firstId;
let endId = firstId + 5000;
var allItems = [];
console.log(`startId ${startId} endId ${endId} lastId ${lastId}`);
console.log("query", query);
const startDate = new Date();
let endDate = new Date();
let diffMinutes = 0;
let queryNumber = 0;
do {
// to avoid 429 error
if(queryNumber % 10 == 0){
await sleep(60000); // 60 000 ms = 1 minute
}
var select = "?$select=File/Length";
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items${select}&$filter=Id ge ${startId} and Id lt ${endId}${query}&$orderby=Id asc&$top=5000&$expand=File`;
console.log("req", req);
let respList1 = null;
try {
respList1 = await fetch(req, fetchOptions);
if (!respList1.ok) {
const errorDetails = await respList1.text();
console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
let err = JSON.parse(errorDetails);
console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
console.log(err.error.message.value);
throw new Error(`HTTP error! Status: ${respList1.status}`);
}
endDate = new Date();
queryNumbercatch (error) {
console.log("error", error);
return null;
}
const items = (await respList1.json()).d.results;
allItems.push(...items);
startId += 5000;
endId += 5000;
const diffMs = endDate - startDate;
diffMinutes = Math.floor(diffMs / (1000 * 60));
console.log(`startId ${startId} endId ${endId} lastId ${lastId} diffMinutes ${diffMinutes} queryNumber ${queryNumber}`)
}
while (endId < lastId);
console.log("queryNumber", queryNumber);
return allItems;
}
let totalSize = 0
const siteUrl = "Your site Url";
const items = await GetFolderSize(siteUrl, "Your doclib Name", "startswith(ContentTypeId,'0x0101')");
// calculate file Size
for (let i = 0; i < items.length; i++) {
if (items[i].File != undefined && items[i].File.Length != undefined) {
totalSize += parseInt(items[i].File.Length);
}
}
const totalSizeGB = (totalSize / (1024 * 1024 * 1024)).toFixed(2);
console.log("totalSize B", totalSize);
console.log("total size MB", (totalSize / (1024 * 1024)).toFixed(2));
console.log("total size GB", totalSizeGB);
console.log("items length", items.length);
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function GetFolderSize(siteUrl, listUrl1, query) {
// Fetch options with headers for authentication and response format
const fetchOptions = {
method: 'GET',
headers: {
'Accept': 'application/json;odata=verbose'
}
};
//get web relativeUrl
var req = `${siteUrl}/_api/web?$select=ServerRelativeUrl`;
const webServerRelativUrl = (await (await fetch(req, fetchOptions)).json()).d.ServerRelativeUrl;
let query1 = "";
if (`${query}`.trim() !== "") {
query1 = `&$filter=${query}`;
query = ` and ${query}`;
}
//get firstId
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id asc`;
console.log("req", req);
const firstId = 0;
console.log("firstId", firstId);
//get lastId
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id desc`;
console.log("last", req);
const lastId = (await (await fetch(req, fetchOptions)).json()).d.results[0].Id;
console.log("lastId", lastId);
let startId = firstId;
let endId = firstId + 5000;
var allItems = [];
console.log(`startId ${startId} endId ${endId} lastId ${lastId}`);//FileSizeDisplay
console.log("query", query);//_UIVersionString File_x0020_Size
const startDate = new Date();
let endDate = new Date();
let diffMinutes = 0;
let queryNumber = 0;
do {
//to avoid 429 error
if(queryNumber % 10 == 0){
await sleep(60000); // 60 000 ms = 1 minute
}
var select = "?$select=File/Length";
req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items${select}&$filter=Id ge ${startId} and Id lt ${endId}${query}&$orderby=Id asc&$top=5000&$expand=File`;
console.log("req", req);
// Send the asynchronous GET request to the REST API endpoint /_api/site/usage
let respList1 = null;
try {
respList1 = await fetch(req, fetchOptions);
if (!respList1.ok) {
const errorDetails = await respList1.text(); // Get error details from the response
console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
let err = JSON.parse(errorDetails);
console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
console.log(err.error.message.value);
throw new Error(`HTTP error! Status: ${respList1.status}`);
}
endDate = new Date();
queryNumber++;
} catch (error) {
console.log("error", error);
return null;
}
const items = (await respList1.json()).d.results;
allItems.push(...items);
startId += 5000;
endId += 5000;
const diffMs = endDate - startDate;
diffMinutes = Math.floor(diffMs / (1000 * 60));
console.log(`startId ${startId} endId ${endId} lastId ${lastId} diffMinutes ${diffMinutes} queryNumber ${queryNumber}`)
}
while (endId < lastId);
//console.log("allItems", allItems);
console.log("queryNumber", queryNumber);
return allItems;
}
let totalSize = 0
const siteUrl = "Your site Url";
const items = await GetFolderSize(siteUrl, "Your doclib Name", "startswith(ContentTypeId,'0x0101')");
//calculate file Size
for (let i = 0; i < items.length; i++) {
if (items[i].File != undefined && items[i].File.Length != undefined) {
totalSize += parseInt(items[i].File.Length);
}
}
const totalSizeGB = (totalSize / (1024 * 1024 * 1024)).toFixed(2);
console.log("totalSize B", totalSize);
console.log("total size MB", (totalSize / (1024 * 1024)).toFixed(2));
console.log("total size GB", totalSizeGB);
console.log("items length", items.length);
//console.log("items", items);
On 09/10/2025
const fetchOptions = {
method: 'GET',
headers: {
'Accept': 'application/json;odata=verbose'
}
};
let respList1 = await fetch(`yoursiteUrl/_api/site/usage`, fetchOptions);
if (!respList1.ok) {
const errorDetails = await respList1.text(); // Get error details from the response
console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
let err = JSON.parse(errorDetails);
console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
console.log(err.error.message.value);
throw new Error(`HTTP error! Status: ${respList1.status}`);
}
const usage = await respList1.json();
console.log("usage", `${usage.d.Usage.Storage/ (1024 * 1024 * 1024)} Gb`);
On 07/10/2025
Modèles de sites SharePoint modernes (2025)
| Code du modèle | Nom du modèle | Description | Type de site associé |
|---|---|---|---|
| STS#3 | Site d’équipe (Team Site) | Site de collaboration pour les équipes, avec bibliothèques de documents, listes de tâches, calendrier et intégration avec Microsoft Teams. | Groupe Microsoft 365/Teams |
| GROUP#0 | Site d’équipe moderne | Équivalent moderne de STS#3, toujours lié à un groupe Microsoft 365 (et donc à Teams si activé). | Groupe Microsoft 365/Teams |
| SITEPAGEPUBLISHING#0 | Site de communication (Communication Site) | Pour diffuser des informations (actualités, rapports, événements) à large audience. Pas lié à Teams. | Site autonome |
| COMMSITE#0 | Site de communication moderne | Version moderne du site de publication, optimisé pour la communication visuelle et les composants web. | Site autonome |
| STS#0 | Site vide (Blank Site) | Site SharePoint vide, sans listes ni bibliothèques préconfigurées. | Site autonome |
| BDR#0 | Centre de documents | Pour gérer et organiser des documents en masse, souvent utilisé comme archive. | Site autonome |
| SRCHCEN#0 | Centre de recherche | Site dédié à la recherche avancée dans SharePoint. | Site autonome |
| SRCHCENTERLITE#0 | Centre de recherche léger | Version simplifiée du centre de recherche. | Site autonome |
| EDISC#0 | Centre de découverte électronique | Pour la gestion des données dans un contexte juridique ou de conformité. | Site autonome |
| POINTPUBLISHING#0 | Site de publication | Pour publier des pages web avec flux de travail d’approbation (classique). | Site autonome |
2. Modèles classiques (moins utilisés en 2025, mais toujours disponibles)
| Code du modèle | Nom du modèle | Description |
|---|---|---|
| STS#1 | Site d’équipe classique | Ancienne version du site d’équipe, sans intégration moderne avec Teams. |
| STS#2 | Site d’équipe vide | Site d’équipe sans contenu préconfiguré. |
| WIKI#0 | Site Wiki | Pour créer une base de connaissances collaborative sous forme de wiki. |
| BLOG#0 | Site de blog | Pour publier des articles sous forme de blog. |
| DEV#0 | Site de développement | Pour les développeurs, avec des listes de suivi de bugs et de tâches. |
| PROJECTSITE#0 | Site de projet | Pour gérer des projets, avec des listes de tâches et des jalons. |
| COMMUNITY#0 | Site communautaire | Pour créer une communauté avec forums de discussion. |
| VISPRJS#0 | Référentiel Visio | Pour stocker et partager des diagrammes Visio. |
On 02/10/2025
Cours : Les Nombres Relatifs (Addition, Soustraction, Multiplication, Division)
1. Qu’est-ce qu’un nombre relatif ?
Un nombre relatif est un nombre qui peut être positif (+) ou négatif (−). Exemples : +3 (positif), −5 (négatif), 0 (ni positif ni négatif).
2. Addition et Soustraction de Nombres Relatifs
Règle 1 : Addition de deux nombres négatifs
Le résultat est toujours négatif. On additionne leurs distances à zéro et on garde le signe −. Exemple : (−3) + (−4) = −7 (On fait 3 + 4 = 7, puis on met le signe −.)
Règle 2 : Si deux signes "−" se suivent, ça devient "+"
C’est la règle des signes qui se suivent :
− (−) devient +
+ (+) reste +
Exemples :
(−5) − (−3) = −5 + 3 = −2 (Les deux "−" deviennent "+".)
(+7) + (+2) = 7 + 2 = 9 (Les deux "+" restent "+".)
Cas particulier :
(+5) − (+3) = 5 − 3 = 2 (Le "+ −" devient "−".)
Règle 3 : Addition de deux nombres de signes différents
On soustrait les distances à zéro et on garde le signe du nombre le plus grand. Exemples :
(−6) + (+4) = −2 (6 > 4, donc le résultat est négatif.)
(+8) + (−3) = +5 (8 > 3, donc le résultat est positif.)
3. Multiplication et Division de Nombres Relatifs
Règle 1 : Produit de deux nombres négatifs
Le résultat est toujours positif. Exemple : (−2) × (−4) = +8
Règle 2 : Produit d’un nombre positif et d’un nombre négatif
Le résultat est toujours négatif. Exemples :
(+3) × (−5) = −15
(−6) ÷ (+2) = −3
Exemples :
(+4) × (+3) = +12
(−6) ÷ (−2) = +3
(+5) × (−2) = −10
(−8) ÷ (+4) = −2
4. Résumé des Règles à Retenir
✅ Addition/Soustraction :
Deux "−" qui se suivent → +
Si les nombres ont le même signe, on additionne et on garde le signe.
Si les nombres ont des signes différents, on soustrait et on prend le signe du plus grand.
✅ Multiplication/Division :
Deux nombres négatifs → Résultat positif.
Un positif et un négatif → Résultat négatif.
5. Exercices d’Application
Calcule :
(−7) + (−5) = ?
(+9) − (−4) = ?
(−3) × (−6) = ?
(+12) ÷ (−4) = ?
(−2) + (+8) = ?
Corrigés :
−12
13
+18
−3
+6
6. Astuce pour Retenir
"Moins par moins, égal plus" (pour × et ÷).
"Deux négatifs s’annulent" (en addition/soustraction, −(−) devient +).
Nombre Relatifs Multiplication Division
On 01/10/2025
Exercice : Multiplications et divisions de nombres relatifs
Nombre Relatifs Addition Soustraction
On 29/09/2025