# Propre nettoyage des fichiers téléchargés et création de liens de requête

> Vérifiez le nettoyage de téléchargement par défaut, l'effacement automatique (faux), l'effacement explicite et le remplacement des requêtes href.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: 1a14ecd5f5dcc3da4daf67e3059a0933a3d480f04afe4b4b7918a73c4c73aef1
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Les fichiers temporaires téléchargés disparaissent normalement lorsque la demande est libérée. `$.autoclear(false)` les conserve pour les travaux qui survivent à la réponse : votre application doit alors les déplacer ou les supprimer. `$.clear()` planifie la suppression des téléchargements amovibles et vide `$.files` ; la suppression du disque est asynchrone. Ne stockez jamais les chemins arbitraires fournis par un client pour une suppression ultérieure.

Dans la version 0.0.19, créez des liens de requête avec l'assistant public `QUERIFY()` et une copie de la requête, comme le montre cette recette. Il produit une chaîne de requête, pas une redirection ou une URL absolue.

La carte des fichiers conservés et les points de terminaison de nettoyage ci-dessous sont un élément local ; une application doit utiliser une propriété étendue et un stockage durable plutôt que d'exposer ces points de terminaison.

```js controllers/lifecycle.js
var paths = Object.create(null);
exports.install = function() {
	ROUTE('POST /upload/{mode}/ @upload <1mb', function($) {
		var file = $.files[0];
		if (!file) return $.invalid(400);
		var id = UID();
		paths[id] = file.path;
		if ($.params.mode === 'retain') $.autoclear(false);
		if ($.params.mode === 'clear') $.clear();
		$.json({ id: id, files: $.files.length });
	});
	ROUTE('GET /exists/{id}/', $ => $.json({ exists: !!paths[$.params.id] && F.Fs.existsSync(paths[$.params.id]) }));
	ROUTE('POST /cleanup/{id}/', function($) {
		var path = paths[$.params.id];
		if (path) { F.Fs.rmSync(path, { force: true }); delete paths[$.params.id]; }
		$.success();
	});
	ROUTE('GET /link/', function($) {
		var broken = false;
		try { $.href('page', '2'); } catch (e) { broken = e instanceof TypeError; }
		$.json({ broken: broken, link: QUERIFY('', Object.assign({}, $.query, { page: '2 & more' })) });
	});
};
```
