# Fichiers

> Parcourir, lire, écrire, renommer, supprimer.

Ces routes demandent la capacité `files`. Tous les chemins sont relatifs à la racine du
service, jamais au système du nœud : `..` est refusé.

## Lister un dossier

```http
GET /api/resources/{id}/files?directory=/
```

```json
[
  {
    "name": "server.jar",
    "size": 52428800,
    "directory": false,
    "symlink": false,
    "mime": "application/java-archive",
    "modeBits": "0644",
    "modifiedAt": "2026-09-16T18:02:11.000Z"
  }
]
```

## Lire un fichier

```http
GET /api/resources/{id}/files/contents?path=/server.properties
```

```json
{ "content": "motd=Bienvenue\nmax-players=20\n" }
```

L'éditeur s'arrête à 2 Mo. Au-delà, ou pour du binaire, passe par le
[SFTP](/api/sftp).

## Écrire

```http
POST /api/resources/{id}/files/write
```

```json
{ "path": "/server.properties", "content": "motd=Bienvenue\n" }
```

Le fichier est créé s'il n'existe pas, remplacé sinon. Rien n'est fusionné : le contenu
envoyé est le contenu final.

## Créer un dossier

```http
POST /api/resources/{id}/files/directory
```

```json
{ "root": "/", "name": "plugins" }
```

## Renommer

```http
PUT /api/resources/{id}/files/rename
```

```json
{ "root": "/plugins", "from": "ancien.jar", "to": "nouveau.jar" }
```

## Supprimer

```http
POST /api/resources/{id}/files/delete
```

```json
{ "root": "/plugins", "files": ["vieux.jar", "obsolete.jar"] }
```

Jusqu'à 100 noms par appel. La suppression est définitive : le service n'a pas de
corbeille.
