Importeren & Exporteren
Exporteer projecten als portable .mpz-bestanden voor back-up of overdracht, en importeer ze in andere tenants. Beheer ook project-miniatuurafbeeldingen.
Projectpakketten (.mpz)
Het .mpz-formaat is een mindzie Package Zip die bevat:
- Projectinstellingen en metadata
- Alle datasets en hun configuraties
- Onderzoeken en notitieboeken
- Dashboards en panelen
- Blobopslagbestanden (gebeurtenislogboeken, bijlagen)
Project Exporteren
GET /api/{tenantId}/project/{projectId}/download
Exporteert het project als een .mpz (mindzie Package Zip) bestand.
Padparameters
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De tenant-identificatie |
projectId |
GUID | Ja | Het te exporteren project |
Respons
Geeft een binaire bestand-download terug met:
- Content-Type:
application/octet-stream - Bestandsnaam:
{projectName}.mpz
Gebruiksscenario's
- Back-up: Maak regelmatige back-ups van belangrijke projecten
- Migratie: Verplaats projecten tussen tenants of instanties
- Templates: Exporteer een geconfigureerd project als sjabloon voor nieuwe analyses
Project Importeren
POST /api/{tenantId}/project/import
Importeert een project vanuit een .mpz-bestand.
Padparameters
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De doel-tenant |
Verzoek
- Content-Type:
multipart/form-data - Bestandsparameter:
file(het .mpz-bestand)
Beperkingen
| Beperking | Waarde |
|---|---|
| Maximale bestandsgrootte | 1 GB |
| Bestandsextensie | Moet .mpz zijn |
| Bestandformaat | Moet een geldige mindzie projectexport zijn |
Respons (200 OK)
{
"success": true,
"projectId": "99999999-9999-9999-9999-999999999999",
"projectName": "Geïmporteerd Project",
"datasetsImported": 2,
"investigationsImported": 3,
"dashboardsImported": 1,
"message": "Project succesvol geïmporteerd"
}
Responsvelden
| Veld | Type | Beschrijving |
|---|---|---|
success |
boolean | Of importeren geslaagd is |
projectId |
GUID | ID van het nieuw aangemaakte project |
projectName |
string | Naam van het geïmporteerde project |
datasetsImported |
integer | Aantal geïmporteerde datasets |
investigationsImported |
integer | Aantal geïmporteerde onderzoeken |
dashboardsImported |
integer | Aantal geïmporteerde dashboards |
message |
string | Menselijk leesbare status |
Foutreacties
Bad Request (400):
{
"success": false,
"errorMessage": "Ongeldig bestandsformaat. Verwacht .mpz bestand."
}
Miniatuurbeheer
Project-miniaturen worden weergegeven in de projectenlijst en zorgen voor visuele herkenning.
Miniatuur Ophalen
GET /api/{tenantId}/project/{projectId}/thumbnail
Haalt de miniatuurafbeelding van het project op.
Respons (200 OK)
{
"projectId": "87654321-4321-4321-4321-210987654321",
"hasThumbnail": true,
"base64Image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
Responsvelden
| Veld | Type | Beschrijving |
|---|---|---|
projectId |
GUID | Projectidentificatie |
hasThumbnail |
boolean | Of er een miniatuur bestaat |
base64Image |
string | Base64-gecodeerde afbeelding met data-URI prefix |
Miniatuur Bijwerken
POST /api/{tenantId}/project/{projectId}/thumbnail
Werk de miniatuurafbeelding van het project bij.
Verzoek Body
{
"base64Image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
Opmerking: De base64-string moet de data-URI prefix bevatten (bijv. data:image/jpeg;base64, of data:image/png;base64,).
Respons (200 OK)
{
"message": "Miniatuur succesvol bijgewerkt"
}
Miniatuur Verwijderen
DELETE /api/{tenantId}/project/{projectId}/thumbnail
Verwijdert de miniatuurafbeelding van het project.
Respons (200 OK)
{
"message": "Miniatuur succesvol verwijderd"
}
Implementatievoorbeelden
cURL
# Project exporteren naar bestand
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/download" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--output project_backup.mpz
# Project importeren vanuit bestand
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/import" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@project_backup.mpz"
# Miniatuur ophalen
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Miniatuur bijwerken (van base64 bestand)
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"base64Image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."}'
# Miniatuur verwijderen
curl -X DELETE "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Python
import requests
import base64
from pathlib import Path
TENANT_ID = '12345678-1234-1234-1234-123456789012'
BASE_URL = 'https://your-mindzie-instance.com'
class ProjectExportManager:
def __init__(self, token):
self.headers = {
'Authorization': f'Bearer {token}'
}
def export_project(self, project_id, output_path):
"""Exporteer project naar .mpz bestand."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/download'
response = requests.get(url, headers=self.headers, stream=True)
response.raise_for_status()
with open(output_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"Geëxporteerd naar {output_path}")
return output_path
def import_project(self, file_path):
"""Importeer project vanuit .mpz bestand."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/import'
with open(file_path, 'rb') as f:
files = {'file': (Path(file_path).name, f, 'application/octet-stream')}
response = requests.post(url, headers=self.headers, files=files)
response.raise_for_status()
result = response.json()
print(f"Geïmporteerd: {result['projectName']}")
print(f" Datasets: {result['datasetsImported']}")
print(f" Onderzoeken: {result['investigationsImported']}")
print(f" Dashboards: {result['dashboardsImported']}")
return result
def get_thumbnail(self, project_id):
"""Haal project-miniatuur op als base64."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def set_thumbnail(self, project_id, image_path):
"""Stel project-miniatuur in vanaf afbeeldingsbestand."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
# Lees en codeer afbeelding
with open(image_path, 'rb') as f:
image_data = f.read()
# Bepaal MIME-type
ext = Path(image_path).suffix.lower()
mime_type = 'image/jpeg' if ext in ['.jpg', '.jpeg'] else 'image/png'
# Maak base64 data URI
base64_data = base64.b64encode(image_data).decode('utf-8')
data_uri = f'data:{mime_type};base64,{base64_data}'
headers = {**self.headers, 'Content-Type': 'application/json'}
response = requests.post(url, json={'base64Image': data_uri}, headers=headers)
response.raise_for_status()
print(f"Miniatuur bijgewerkt voor project {project_id}")
return response.json()
def remove_thumbnail(self, project_id):
"""Verwijder project-miniatuur."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
response = requests.delete(url, headers=self.headers)
response.raise_for_status()
return response.json()
# Gebruik
manager = ProjectExportManager('your-auth-token')
project_id = '87654321-4321-4321-4321-210987654321'
# Project exporteren voor back-up
manager.export_project(project_id, 'my_project_backup.mpz')
# Importeren in dezelfde of andere tenant
result = manager.import_project('my_project_backup.mpz')
new_project_id = result['projectId']
# Stel een miniatuur in
manager.set_thumbnail(project_id, 'project_thumbnail.png')
# Miniatuur ophalen
thumbnail = manager.get_thumbnail(project_id)
if thumbnail['hasThumbnail']:
print("Miniatuur bestaat")
JavaScript/Node.js
const fs = require('fs');
const path = require('path');
const FormData = require('form-data');
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const BASE_URL = 'https://your-mindzie-instance.com';
class ProjectExportManager {
constructor(token) {
this.headers = {
'Authorization': `Bearer ${token}`
};
}
async exportProject(projectId, outputPath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/download`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) {
throw new Error(`Exporteren mislukt: ${response.status}`);
}
const buffer = await response.arrayBuffer();
fs.writeFileSync(outputPath, Buffer.from(buffer));
console.log(`Geëxporteerd naar ${outputPath}`);
}
async importProject(filePath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/import`;
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
const response = await fetch(url, {
method: 'POST',
headers: {
...this.headers,
...formData.getHeaders()
},
body: formData
});
if (!response.ok) {
throw new Error(`Importeren mislukt: ${response.status}`);
}
const result = await response.json();
console.log(`Geïmporteerd: ${result.projectName}`);
return result;
}
async setThumbnail(projectId, imagePath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/thumbnail`;
// Lees en codeer afbeelding
const imageBuffer = fs.readFileSync(imagePath);
const ext = path.extname(imagePath).toLowerCase();
const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
const base64Data = imageBuffer.toString('base64');
const dataUri = `data:${mimeType};base64,${base64Data}`;
const response = await fetch(url, {
method: 'POST',
headers: {
...this.headers,
'Content-Type': 'application/json'
},
body: JSON.stringify({ base64Image: dataUri })
});
if (!response.ok) {
throw new Error(`Miniatuur bijwerken mislukt: ${response.status}`);
}
return await response.json();
}
}
// Gebruik
const manager = new ProjectExportManager('your-auth-token');
// Exporteren en importeren
await manager.exportProject('project-id', 'backup.mpz');
const imported = await manager.importProject('backup.mpz');
// Miniatuur instellen
await manager.setThumbnail('project-id', 'thumbnail.png');
Best Practices
- Regelmatige Back-ups: Plan regelmatige exports van belangrijke projecten
- Versienaamgeving: Voeg datums toe in exportbestandsnamen (bijv.
project_2024-01-15.mpz) - Test Imports: Test imports in een niet-productie tenant vóór productie
- Miniatuurgrootte: Houd miniaturen onder 100KB voor snelle laadtijd
- Miniatuurformaat: Gebruik JPEG voor foto's, PNG voor afbeeldingen met transparantie